如何在Django基于类的视图中使用login_not_required?
处理Django 5.1中无需认证的基于类的视图
当启用LoginRequiredMiddleware后,要让特定基于类的视图跳过登录验证,有两种实用方案:
方案一:在URL配置中装饰as_view()方法
直接给类视图的as_view()方法套上login_not_required装饰器,示例代码如下:
from django.contrib.auth.decorators import login_not_required from django.urls import path from .views import PublicClassView urlpatterns = [ path("public/", login_not_required(PublicClassView.as_view()), name="public-page"), ]
方案二:在类视图内部使用method_decorator
如果希望在视图类层面配置,可以用method_decorator将login_not_required应用到dispatch方法上,这样整个类视图都会跳过登录校验:
from django.contrib.auth.decorators import login_not_required from django.utils.decorators import method_decorator from django.views.generic import TemplateView @method_decorator(login_not_required, name="dispatch") class PublicClassView(TemplateView): template_name = "public.html"
如果仅需开放特定HTTP方法(比如get),也可以单独装饰对应方法,但多数场景下装饰dispatch能实现整个视图的公开访问。
这两种方式都能让基于类的视图脱离LoginRequiredMiddleware的强制登录限制,效果和函数视图使用login_not_required完全一致。
内容的提问来源于stack exchange,提问作者Zags
相关产品推荐
相关产品推荐

