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

Django点击登录按钮后login_user函数未触发,请求排查问题

问题排查与解决

核心原因:URL匹配规则与表单提交目标导致自定义视图未被触发

1. URL配置的格式与优先级冲突

  • 你的自定义login路径为path('login', ...)(不带末尾斜杠),但Django默认开启APPEND_SLASH=True,访问不带斜杠的路径会被自动重定向到带斜杠的版本。
  • django.contrib.auth.urls内置的登录路径是path('login/', ...)(带末尾斜杠),且主urls.py中你将内置auth配置放在了自定义配置之后,重定向后的请求会优先匹配内置登录视图,而非你的login_user。

2. 表单未指定明确的提交目标

登录表单没有设置action属性,会默认提交到当前页面的URL。如果当前页面是重定向后的/accounts/login/,请求会被内置视图处理,根本无法触发你的自定义函数。


修复步骤

步骤1:统一URL路径格式,确保自定义视图优先匹配

修改loginForm/urls.py的路径,添加末尾斜杠,与内置路径格式保持一致:

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login_user, name='login'),  # 添加末尾斜杠
]

步骤2:给表单指定提交目标

修改login.html的form标签,明确指向你的login命名URL:

<h2>Log In</h2>
<form method="POST" action="{% url 'login' %}">
    {% csrf_token %}
    <div class="mb-3">
        <label for="email" class="form-label">Email address</label>
        <input type="email" class="form-control" name="email" aria-describedby="emailHelp">
    </div>
    <div class="mb-3">
        <label for="exampleInputPassword1" class="form-label">Password</label>
        <input type="password" class="form-control" name="password">
    </div>
    <input type="submit" value="Log In" class="btn btn-secondary">
</form>

步骤3:补充邮箱登录的必要配置(关键后续问题)

Django默认authenticate函数使用username字段验证身份,若想用邮箱登录,需二选一:

  • 自定义用户模型,将USERNAME_FIELD设置为email
  • 添加自定义认证后端,支持通过邮箱校验用户身份

否则即使视图被触发,authenticate也会返回None,导致登录失败。


验证方式

在login_user函数开头添加打印语句,重启Django服务后访问/accounts/login/提交表单,查看控制台输出确认函数是否被调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:55:17