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

为Django登录页添加CSS后登录功能失效的问题排查

登录功能失效问题排查与解决

问题背景

我有一个基于PostgreSQL的Django网站,原本登录功能正常,为优化样式修改了登录页面和_base.html的布局代码,但未改动表单核心逻辑,登录功能却失效了。提交登录表单后,URL变成了包含登录参数的GET请求格式,无法跳转到首页。

原登录页面代码

{% extends "_base.html" %}
{% load crispy_forms_tags %}
{% block title %}Log In{% endblock title %}
{% block content %}
<h2>Log In</h2>
<div class="container text-center">
    <div class="row justify-content-center">
        <div class="col-4">
            <form method="post">
                {% csrf_token %}
                {{ form | crispy }}
                <button class="btn btn-primary " type="submit">Log In</button>
            </form>
        </div>
    </div>
</div>
{% endblock content %}

原_base.html代码片段

<!-- additional css content for navbar -->
<div class="container-fluid full-height p-0">
    {% block content %}
    {% endblock content %}
<!-- similar footer content -->

修改后的登录页面代码

{% extends "_base.html" %}
{% load crispy_forms_tags %}
{% block title %}Log In{% endblock title %}
{% block content %}
<div class="bg-dark vh-100 d-flex align-items-center justify-content-center">
    <div class="col-3 p-5 border bg-light rounded-2">
        <h2>Log In</h2>
        <form method=" post">
            {% csrf_token %}
            {{ form | crispy }}
            <button class="btn btn-primary " type="submit">Log In</button>
        </form>
    </div>
</div>
{% endblock content %}

修改后的_base.html代码片段

<div class="container-fluid p-0">
    {% block content %}
    {% endblock content %}
</div>

提交后URL示例:

http://localhost:8000/accounts/login/?csrfmiddlewaretoken=XgEmrXg1fMJfOoPSnDyuY733MrWTxjaAWHnCnej9sFI6buue93sMgggrwIsTOibd&login=adminsav%40email.com&password=testpass123

问题原因

问题出在修改后的登录页面表单标签上:<form method=" post"> 中,post前面多了一个空格。部分浏览器会将带前导空格的属性值识别为无效HTTP方法,自动 fallback 到默认的GET方法。

Django内置登录视图(django.contrib.auth.views.LoginView)仅接受POST请求处理登录逻辑,当表单以GET方式提交时,视图只会重新渲染登录页面,不会执行登录验证,因此登录功能失效,所有表单参数被附加到URL中。

解决方案

将表单标签中的method属性值修正为无空格的post:

<form method="post">

修改后,表单会以POST方式提交数据,Django登录视图会正常处理验证逻辑,验证通过后跳转至预设的首页。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:30:41