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

Django项目自定义URL后仍重定向至默认认证路径问题排查

解决Django 5.1自定义登录后重定向默认路径的问题

问题根源

你的问题出在Django认证系统的默认配置逻辑上:

  • login_required装饰器默认会将未登录用户重定向到/accounts/login/
  • 用户登录成功后,系统默认的重定向目标是/accounts/profile/
    即使你移除了默认的django.contrib.auth.urls路由,这些全局配置规则依然会生效。

解决方案

1. 修改项目settings.py全局配置

在项目根目录的settings.py中添加以下配置,覆盖默认的认证跳转路径:

# 指定自定义登录页面的URL名称(对应你urls.py里的name="login")
LOGIN_URL = 'login'
# 指定登录成功后的默认重定向目标(这里指向你的首页)
LOGIN_REDIRECT_URL = '/'
# 可选:自定义登出后的跳转路径
LOGOUT_REDIRECT_URL = 'login'

提示:LOGIN_URL也可以直接填路径'/login/',但使用URL名称更适配路由的灵活调整。

2. 优化视图中的冗余代码

你的index视图里,@login_required装饰器已经会自动拦截未登录用户并跳转到LOGIN_URL指定的页面,无需手动重复判断用户认证状态,可简化为:

@login_required
def index(request):
    return render(request, "index.html", {"user": request.user})

3. 可选:单独配置装饰器跳转路径

如果不想全局修改配置,也可以给每个login_required装饰器单独指定跳转目标,例如:

@login_required(login_url='login')
def profile(request):
    customer = request.user.customer
    profile_form = CustomerUpdateForm(instance=customer)
    password_form = CustomerPasswordChangeForm(user=request.user)
    return render(
        request,
        "profile.html",
        {"profile_form": profile_form, "password_form": password_form},
    )

但全局配置更简洁,推荐优先使用第一种方案。

4. 检查登出视图的导入正确性

确保登出视图中auth_logout的导入避免命名冲突:

from django.contrib.auth import logout as auth_logout

验证修改效果

完成配置后:

  • 未登录用户访问需要认证的页面(如/或/profile/),会自动跳转到自定义的/login/页面
  • 用户登录成功后,直接跳转至首页/,而非默认的/accounts/profile/
  • 登出操作完成后,会跳转到/login/页面

内容的提问来源于stack exchange,提问作者Abobaker khaled

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:16:00