姜戈 decorator_from_middle type_error

Django decorator_from_middle type_error

我试图从 Django 的某些视图中排除中间件,但我遇到了问题。
这是中间件class

class JWTAuthorisation(object):

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # before view
        token = request.headers.get('x-auth-token')
        if not token:
            return HttpResponse("No access token provided", status=401)

        response = self.get_response(request)
        return response

我正在使用这个@来包含要查看的中间件

  @decorator_from_middleware(JWTAuthorisation)
  def register(request):
    if request.method == "POST":

这是错误

 File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "E:\LoreProject\users\urls.py", line 3, in <module>
    from users import views
  File "E:\LoreProject\users\views.py", line 75, in <module>
    @decorator_from_middleware(JWTAuthorisation)
  File "E:\LoreProject\venv\lib\site-packages\django\utils\decorators.py", line 111, in decorator_from_middleware
    return make_middleware_decorator(middleware_class)()
  File "E:\LoreProject\venv\lib\site-packages\django\utils\decorators.py", line 116, in _make_decorator
    middleware = middleware_class(*m_args, **m_kwargs)
TypeError: __init__() missing 1 required positional argument: 'get_response'

更新 我将 class 更改为

class JWTAuthorisation(object):

   def process_request(self,request):
       print("hello")
       return None

我收到这个

 File "E:\LoreProject\venv\lib\site-packages\django\core\wsgi.py", line 13, in get_wsgi_application
    return WSGIHandler()
  File "E:\LoreProject\venv\lib\site-packages\django\core\handlers\wsgi.py", line 127, in __init__
    self.load_middleware()
  File "E:\LoreProject\venv\lib\site-packages\django\core\handlers\base.py", line 37, in load_middleware
    mw_instance = middleware(handler)
TypeError: object() takes no parameters

来自 docs for decorator_from_middleware

Given a middleware class, returns a view decorator. This lets you use middleware functionality on a per-view basis. The middleware is created with no params passed.

It assumes middleware that’s compatible with the old style of Django 1.9 and earlier (having methods like process_request(), process_exception(), and process_response()).

您的中间件需要是“旧式”

好的,错误是这样的:
中间是在设置中设置的,我想排除它。 因此,如果从 settings.py 中删除 middlle 并将 middle 更改为 1.9 django 样式,这将起作用。 谢谢!