使用@decorator_from_middleware 时无法导入自定义中间件。 (非全局中间件)
Can't import custom Middleware whilst using @decorator_from_middleware. (Non Global Middleware)
我正在使用一些自定义中间件来检查用户的身份验证。这工作得很好,但我不想 运行 每个 url 这个中间件。
Suggestions 指向使用 @decorator_from_middleware
在您希望中间件 运行 的每个视图之前,这将是理想的。我的一些观点应该是全球性的,其他人落后于auth。
我似乎无法导入中间件以在视图文件中调用它。
我的views.py:
from myapp.middleware import *
@decorator_from_middleware(AuthCheckMiddleware)
def index(request):
return render(request, "index.html")
我的myapp.middleware.authCheck.py:
class AuthCheckMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
#CHECK AUTH HERE
response = self.get_response(request)
return response
def process_exception(self, request, exception):
return None
我得到的错误:
File "/vagrant/myapp/django-project/isadmin/web/views.py", line 93, in <module>
@decorator_from_middleware(AuthCheckMiddleware)
NameError: name 'AuthCheckMiddleware' is not defined
这是标准的 Python 行为。除非您在 myapp.middleware 的 __init__.py
中显式导入 AuthCheckMiddleware,否则它不会被 from myapp.middleware import *
.
导入
但实际上无论如何你都不应该这样做。很少有充分的理由去做 import *
;总是明确地导入你需要的东西。
from myapp.middleware.authCheck import AuthCheckMiddleware
另请注意,Python 样式适用于具有 lower_case_with_underscore 名称的模块:它应该是 auth_check.py.
另请注意,Python 不 要求或期望每个 class 都在一个单独的文件中,因此您可以 [=24= .py 包含几个 classes,包括 AuthCheckMiddleware。那么你的原始代码就可以工作了(尽管使用 import * 仍然不是一个好主意)。
我正在使用一些自定义中间件来检查用户的身份验证。这工作得很好,但我不想 运行 每个 url 这个中间件。
Suggestions 指向使用 @decorator_from_middleware
在您希望中间件 运行 的每个视图之前,这将是理想的。我的一些观点应该是全球性的,其他人落后于auth。
我似乎无法导入中间件以在视图文件中调用它。
我的views.py:
from myapp.middleware import *
@decorator_from_middleware(AuthCheckMiddleware)
def index(request):
return render(request, "index.html")
我的myapp.middleware.authCheck.py:
class AuthCheckMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
#CHECK AUTH HERE
response = self.get_response(request)
return response
def process_exception(self, request, exception):
return None
我得到的错误:
File "/vagrant/myapp/django-project/isadmin/web/views.py", line 93, in <module>
@decorator_from_middleware(AuthCheckMiddleware)
NameError: name 'AuthCheckMiddleware' is not defined
这是标准的 Python 行为。除非您在 myapp.middleware 的 __init__.py
中显式导入 AuthCheckMiddleware,否则它不会被 from myapp.middleware import *
.
但实际上无论如何你都不应该这样做。很少有充分的理由去做 import *
;总是明确地导入你需要的东西。
from myapp.middleware.authCheck import AuthCheckMiddleware
另请注意,Python 样式适用于具有 lower_case_with_underscore 名称的模块:它应该是 auth_check.py.
另请注意,Python 不 要求或期望每个 class 都在一个单独的文件中,因此您可以 [=24= .py 包含几个 classes,包括 AuthCheckMiddleware。那么你的原始代码就可以工作了(尽管使用 import * 仍然不是一个好主意)。