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

Django中重写accounts/login/路由失效问题求助

解决Django替换auth默认登录路由的问题

核心问题原因

Django的路由匹配是从上到下按顺序匹配的,你之前把自定义的accounts/login路由写在了include("django.contrib.auth.urls")之后,请求会先匹配到auth模块自带的accounts/login路由,导致你的自定义路由无法生效。

分步解决方案

1. 调整项目urls.py的路由顺序

把自定义的accounts/login相关路由移到include("django.contrib.auth.urls")前面,确保优先匹配:

from core import views

urlpatterns = [
    path("admin/", admin.site.urls),
    # 优先匹配自定义登录路由
    path("accounts/login", views.atest, name="login"),
    path("accounts/login/", views.atest, name="login"),
    # 再包含auth的其他路由
    path("accounts/", include("django.contrib.auth.urls")),
    path("", include("core.urls")),
    path("user/", include("user.urls")),
]

2. 配置user应用的自定义登录路由

在user/urls.py中添加c-login的路由,指向你的自定义登录视图:

from django.urls import path
from . import views

urlpatterns = [
    path("c-login/", views.custom_login, name="c-login"),
    # 其他user应用路由...
]

3. 补全自定义登录视图逻辑

你当前的custom_login视图仅定义了template_name,没有返回响应,需要完善成可正常工作的视图。推荐复用Django的LoginView减少重复代码:

from django.contrib.auth.views import LoginView
from django.shortcuts import redirect

def atest(request):
    return redirect("c-login")

# 完善自定义登录视图(类视图方式)
class CustomLoginView(LoginView):
    template_name = "registration/login.html"
    # 可自定义登录成功后的跳转地址
    # success_url = "/user/dashboard/"

# 若偏好函数视图,可这样写:
# def custom_login(request):
#     if request.method == "POST":
#         # 自行处理登录逻辑(验证用户、会话设置等)
#         pass
#     return render(request, "registration/login.html")

如果使用类视图,记得同步修改user/urls.py中的路由:

path("c-login/", views.CustomLoginView.as_view(), name="c-login"),

额外说明

  • 保留django.contrib.auth.urls后,你仍可正常使用其他auth自带路由(如accounts/logout、accounts/password_reset等),仅会替换name="login"对应的路由。
  • 确保name="login"的路由唯一,避免命名冲突,这里通过路由顺序优先级实现覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:10:11