如何修改Django auth视图未登录时的登录跳转路径?
解决Django auth视图跳转自定义登录URL的问题
嘿,这个问题我做项目时也碰到过,其实核心就是调整Django的登录跳转配置,分两种场景给你说清楚:
1. 全局统一修改(推荐)
如果希望整个项目里所有需要登录的视图,都跳转到你自定义的/login/,直接修改项目的settings.py文件就行:
找到或者添加LOGIN_URL配置,把它改成你登录路由的名称或者直接写URL路径:
# settings.py LOGIN_URL = 'login' # 这里填你urls.py中登录路由的name值,比如你配置了path('login/', ..., name='login') # 或者直接写路径也可以:LOGIN_URL = '/login/'
Django默认的LOGIN_URL是'accounts/login/',替换成你的配置后,不管是@login_required装饰的视图,还是auth自带的视图(比如PasswordChangeView),未登录访问时都会自动跳转到/login/?next=xxx。
2. 局部单独修改(针对特定视图)
如果你不想全局改,只想让某个特定视图跳转到自定义登录页,可以这样做:
- 函数视图:给
@login_required装饰器指定login_url参数:
from django.contrib.auth.decorators import login_required @login_required(login_url='/login/') def my_protected_view(request): # 你的视图逻辑
- 类视图:如果用了
LoginRequiredMixin,在类里设置login_url属性:
from django.contrib.auth.mixins import LoginRequiredMixin from django.views.generic import TemplateView class MyProtectedView(LoginRequiredMixin, TemplateView): login_url = '/login/' template_name = 'some_template.html'
额外注意
确保你的urls.py里已经正确配置了登录路由,比如:
from django.contrib.auth import views as auth_views urlpatterns = [ # 自定义登录路由,name='login'要和settings里的LOGIN_URL对应上 path('login/', auth_views.LoginView.as_view(template_name='auth/login.html'), name='login'), # 密码修改路由示例 path('password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'), ]
这样设置后,未登录用户访问/password_change/时,就会跳转到127.0.0.1:8000/login/?next=/password_change/啦~
内容的提问来源于stack exchange,提问作者O James
相关产品推荐
相关产品推荐

