使用@decorator_from_Middleware时无法导入自定义中间件。(非全局中间件)

2024-09-30 16:35:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一些自定义中间件来检查用户的身份验证。这很好用,但我不想在每个url上运行这个中间件。在

Suggestions指向使用@decorator_from_middleware 在您希望中间件运行的每个视图之前,这将是理想的。我的一些观点应该是全球性的,另一些则是auth背后的观点。在

我似乎无法导入中间件来在视图文件中调用它。在

我的视图.py公司名称:

from myapp.middleware import *

@decorator_from_middleware(AuthCheckMiddleware)
def index(request):
    return render(request, "index.html")

我的myapp.middleware.authCheck.py:

^{pr2}$

我得到的错误是:

  File "/vagrant/myapp/django-project/isadmin/web/views.py", line 93, in <module>
@decorator_from_middleware(AuthCheckMiddleware)
NameError: name 'AuthCheckMiddleware' is not defined

Tags: 中间件frompy身份验证视图urlindexrequest
1条回答
网友
1楼 · 发布于 2024-09-30 16:35:40

这是标准的Python行为。除非在的__init__.py中显式导入AuthCheckMiddlewaremyapp.中间件,它不会由from myapp.middleware import *导入。在

但你真的不该这么做。很少有好的理由去做import *;总是显式地导入您需要的东西。在

from myapp.middleware.authCheck import AuthCheckMiddleware

另外请注意,Python样式是让模块具有小写的、带下划线的名称:它应该是auth_检查.py. 在

还要注意,Python并不要求每个类都在单独的文件中,所以可以使用myapp/中间件.py包含多个类,包括AuthCheckMiddleware。那么原始代码就可以工作了(尽管使用import*仍然不是一个好主意)。在

相关问题 更多 >