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

Django用户登录系统异常:Views.py无法接收请求

问题原因分析

你猜的没错:

  • django.contrib.auth.urls包含了Django自带的认证URL规则(含login/、logout/等),这些规则会优先匹配请求,导致你自己写的login_user视图完全没被触发。
  • templates/registration/是Django自带认证系统的默认模板目录,自带的登录视图会自动加载该目录下的login.html,所以哪怕删掉自己的视图,模板依然能正常显示。
解决方案

要让前端数据提交到你自己的后端视图,有两种可行方式:

方式一:替换自带的登录URL规则

修改项目urls.py,将自带的登录URL替换为你自己的视图,确保自定义视图优先级高于自带规则:

from django.contrib.auth import views as auth_views
from . import views  # 导入你的自定义views模块

# 先添加自定义登录路径,URL匹配从上到下,先匹配到的生效
path('login/', views.login_user, name='login'),

# 若需保留其他自带认证功能(如logout),可单独配置
path('logout/', auth_views.LogoutView.as_view(), name='logout'),

# 移除或注释掉原来的全局include规则:
# path('', include('django.contrib.auth.urls')),

方式二:修改表单提交目标(适合保留部分自带认证URL的场景)

如果不想完全替换自带认证URL,只需修改登录模板的表单action属性,指向自定义视图的URL:
打开templates/registration/login.html,调整表单标签:

<form action="{% url 'login' %}" method="POST">
    {% csrf_token %}  <!-- 必须添加,否则Django会拦截POST请求 -->
    <!-- 你的用户名、密码输入框 -->
    <button type="submit">登录</button>
</form>

注意:这里的login是你在urls.py中给login_user视图设置的name值,需保证两者一致。

关键检查点
  1. CSRF令牌必须存在:表单里必须加{% csrf_token %};如果用AJAX提交,要在请求头里带上X-CSRFToken(值从页面的csrfmiddlewaretoken元素获取)。
  2. 模板路径正确:你的login_user视图当前返回render(request, 'login.html', {}),但模板实际在registration/目录下,应改为render(request, 'registration/login.html', {});或者确保settings.py中TEMPLATES的APP_DIRS为True,且你的App已加入INSTALLED_APPS。
  3. 请求方法匹配:确保表单的method属性为POST,和视图里的request.method == "POST"判断逻辑对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 09:40:32