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

Django登录表单无响应,login_view未触发且无任何报错

问题描述

我在index.html文件中编写了登录表单,期望点击登录按钮后显示“您已登录”的提示信息,并使部分按钮可见。但提交表单后没有任何响应,我尝试在views.py的login_view函数中添加打印语句来验证该视图是否被调用,终端却没有任何输出,同时也未收到任何错误信息。


我的代码

HTML代码(index.html)

<form method="POST" action="{% url 'login_view' %}" id="login-form">
              
    <h5>Login Here</h5>
    {% csrf_token %} 
    <input type="email" class="input-field" placeholder="Email" id="mail" name="email"><br>
    <input type="password" class="input-field" placeholder="Password" id="loginpass" name="password"><br>
    <button id="login" type="submit">LOGIN</button><br>  
</form>

views.py代码

def login_view(request):
    print("View accessed")
    if request.method == 'POST':
        email = request.POST['email']  
        password = request.POST['password'] 
        user = authenticate(request, email__iexact=email, password=password)
        if user is not None:
            login(request, user)
            messages.success(request, 'You are logged in ')
            return redirect('home')  
        else:
            messages.error(request, 'Invalid email or password.')
    else:
        messages.error(request, 'Error in login.') 

    return render(request, 'index.html')

urls.py代码

from django.contrib import admin
from django.urls import path
from PMP import views


from PMP import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.home, name='home'),
    path('register/', views.register_view, name='register'),
    path('', views.login_view, name='login_view'),
]

问题排查与解决

核心问题:URL路由冲突

你的urls.py中存在重复的空路径路由:

path('',views.home, name='home'),
path('', views.login_view, name='login_view'),

Django在匹配URL时会按照urlpatterns的顺序进行匹配,第一个空路径''已经匹配到home视图,后续的login_view永远不会被触发,这就是为什么你提交表单后没有任何响应、终端也没有打印输出的原因。

修复步骤

  1. 修改urls.py,给login_view分配唯一的路径
    修改后的urls.py示例:

    from django.contrib import admin
    from django.urls import path
    from PMP import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('',views.home, name='home'),
        path('register/', views.register_view, name='register'),
        # 给登录视图分配专属路径
        path('login/', views.login_view, name='login_view'),
    ]
    
  2. 确保模板中的表单action正确指向新路径
    你的模板中已经使用了{% url 'login_view' %}标签,Django会自动解析为修改后的/login/路径,无需手动修改。

  3. 额外检查:认证逻辑的潜在问题
    如果你使用的是Django默认用户模型,authenticate函数默认是通过username字段验证的,你这里用email__iexact可能无法正确匹配用户。如果要通过邮箱登录,需要:

    • 自定义用户模型,将email设为唯一标识字段
    • 或者自定义认证后端,支持邮箱登录

验证修复效果

修改后重启Django服务器,提交登录表单,此时login_view应该会被触发,终端会打印View accessed,同时根据认证结果返回对应的提示信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:17:44