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

Django登录功能异常:为何重定向至不存在的/accounts/login/login路径?

问题排查与解决方案

核心问题分析

你遇到的/accounts/login/login路径错误,结合代码来看有两个关键问题:

  1. 视图逻辑判断错误
    原代码里用if username is not None:判断认证结果,这完全逻辑颠倒——只要用户输入了用户名(哪怕密码错误),都会执行登录逻辑,而当user为None(认证失败)时反而跳转到注册页。更严重的是,若user为None时执行auth.login(request, user)会直接抛出异常,可能触发后续的错误跳转。

  2. 表单提交路径使用相对路径
    你的登录模板中表单action大概率用了相对路径(比如action="login/"),当当前页面是/accounts/login/时,浏览器会把相对路径拼接到当前路径后,最终变成/accounts/login/login/。


修复步骤

1. 修正登录视图函数

把判断条件改为检查user对象,同时认证失败时直接返回登录页面并携带错误提示,避免不必要的重定向:

def logIn(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        user = auth.authenticate(username=username, password=password)

        if user is not None:  # 正确判断认证后的user对象
            auth.login(request, user)
            return redirect('/')
        else:
            # 认证失败,返回登录页并传递错误信息
            return render(request, 'logIn.html', {'error_msg': '用户名或密码不匹配'})
    else:
        return render(request, 'logIn.html')

2. 给URL路由命名并修正表单action

首先在Accounts/urls.py中给登录路由添加名称,方便Django反向解析URL:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.Empty),
    path('register/', views.register, name='register'),
    path('login/', views.logIn, name='login')  # 添加name属性
]

然后修改登录模板logIn.html中的表单,使用Django的URL反向解析生成绝对路径,彻底解决相对路径问题:

<form method="post" action="{% url 'login' %}">
    {% csrf_token %}
    <input type="text" name="username" placeholder="用户名" required>
    <input type="password" name="password" placeholder="密码" required>
    <!-- 显示错误信息 -->
    {% if error_msg %}
        <p style="color: #dc3545;">{{ error_msg }}</p>
    {% endif %}
    <button type="submit">登录</button>
</form>

额外建议

  • 避免直接写硬编码的URL(比如redirect('/accounts/register/')),尽量使用redirect('register')这种基于路由名称的跳转,后续修改URL结构时无需改动视图代码。
  • 首次开发Django项目可以多参考官方用户认证文档,官方提供了更简洁的认证视图(比如LoginView类视图),能减少重复造轮子的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 13:25:50