Changed in Django 1.10:
A new style of middleware was introduced for use with the new MIDDLEWARE setting. If you’re using the old MIDDLEWARE_CLASSES setting, you’ll need to adapt old, custom middleware before using the new setting. This document describes new-style middleware. Refer to this page in older versions of the documentation for a description of how old-style middleware works.
Django provides django.utils.deprecation.MiddlewareMixin to ease creating middleware classes that are compatible with both MIDDLEWARE and the old MIDDLEWARE_CLASSES. All middleware classes included with Django are compatible with both settings.
ndb.django_middleware.NdbDjangoMiddleware do not follow this style!
Changed in Django 1.10: A new style of middleware was introduced for use with the new MIDDLEWARE setting. If you’re using the old MIDDLEWARE_CLASSES setting, you’ll need to adapt old, custom middleware before using the new setting. This document describes new-style middleware. Refer to this page in older versions of the documentation for a description of how old-style middleware works.
https://docs.djangoproject.com/en/1.10/topics/http/middleware/#writing-your-own-middleware
Django provides django.utils.deprecation.MiddlewareMixin to ease creating middleware classes that are compatible with both MIDDLEWARE and the old MIDDLEWARE_CLASSES. All middleware classes included with Django are compatible with both settings.
ndb.django_middleware.NdbDjangoMiddleware
do not follow this style!