姜戈 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 样式,这将起作用。
谢谢!
我试图从 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 样式,这将起作用。
谢谢!