尝试在Django中定义中间件时,缺少位置参数错误

时间:2017-05-14 07:47:29

标签: django-middleware

我试图在Django 1.10项目中提出我自己的第一个中间件。并且目前遇到以下错误

  

TypeError: init ()缺少1个必需的位置参数:   'get_response'

我已经在middleware.py中定义了这样的中间件:

来自zeon.utils的

导入RequestLogThread

class StartRestEndPointMiddleWare(object):
    def __init__(self, get_response):
        self.get_response = get_response
        # One-time configuration and initialization.

    def __call__(self, request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.
        request.request_log_id = RequestLogThread('send_contact', request.data).start()

        response = self.get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

我想弄清楚什么是错的,因为一切似乎都与doc一致。我真的很感激任何提示。

更新: 我将它放入middle_classes:

MIDDLEWARE_CLASSES = [
    'zeon.middleware.StartRestEndPointMiddleWare',
]

1 个答案:

答案 0 :(得分:2)

Django改变了中间件类在1.10中的工作方式。新式中间件类属于MIDDLEWARE列表,如下所示:

MIDDLEWARE = [
    'zeon.middleware.StartRestEndPointMiddleWare',
]

当您将中间件放入MIDDLEWARE_CLASSES时,它被视为旧式中间件,其工作方式不同。更好的错误消息可能会使这更清楚。