You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:00:20