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

Django登录表单提交仅携带csrftoken,未传递表单字段的问题求助

Django登录表单提交仅携带csrftoken,未传递表单字段的问题求助

大家好,我刚接触Django,这是我的第一个项目。我开发了一个登录表单,但提交时发现只有csrftoken被传递,用户名和密码字段完全没提交,导致表单验证失败,终端里能看到表单提示这两个字段是必填项,浏览器也显示“form is not valid”。我已经排查了好一会儿,但还是没找到问题所在,麻烦各位帮我看看代码哪里出问题了!


1. 表单定义(forms.py)

class MyLoginForm(forms.Form):
    username = forms.CharField(max_length=50)
    password = forms.CharField(widget=forms.PasswordInput())

2. 登录视图函数(views.py)

def login_view(request):
    if not request.user.is_authenticated:
        if request.method == "POST":
            form = MyLoginForm (request.POST)
            print(request.POST)
            if form.is_valid():
                print('valid!!!')
                data = form.cleaned_data
                username = data["username"]
                password = data["password"]
                try:
                    account = Account.objects.get(username=username)
                except Exception as error:
                    print(error)
                    return HttpResponseRedirect(reverse("login"))

                if account is not None:
                    if password == account.password:
                        login(request, account)
                        return render(request, "home.html", {"account": account})
                    else:
                        return HttpResponseRedirect(reverse("login"))
                else:
                    return HttpResponse(f"<h2>No such a User : {username}</h2>")
            else:
                print(form.errors)  # Print form errors to debug
                return HttpResponse("form is not valid")
        else:
            form = MyLoginForm(request.POST)
            return render(request, template_name="login.html", context={"form": form})
    else:
        return HttpResponseRedirect(reverse("home")) 

3. 完整登录模板(login.html)

<!DOCTYPE html>
<html lang="fa">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>صفحه ورود</title>
</head>
<body>
    <div class="login-container">
        <h2>ورود به حساب کاربری</h2>
        <form method="post" action = "">
            {% csrf_token %}
            <div class="form-group">
                <label for="username">نام کاربری</label>
                <input type="text" id="username" name="username" required>
            </div>
            <div class="form-group">
                <label for="password">کلمه عبور</label>
                <input type="password" id="password" name="password" required>
            </div>
            <button type="submit">ورود</button>
        </form>
    </div>
</body>
</html>

4. 终端输出与错误信息

  • 终端打印的POST请求内容:
    <QueryDict: {'csrfmiddlewaretoken': ['rxjKh3oNsgdRBtT20rT1uVWLw2qOR2oQqjOct9iPhEsnJiHAUVgriiDj3Tg1qoog']}>
    
  • 终端打印的表单验证错误:
    <ul class="errorlist"><li>username<ul class="errorlist"><li>This field is required.</li></ul></li><li>password<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
    
  • 浏览器显示内容:

    form is not valid


补充更新内容

主页跳转表单代码

主页里的登录/注册跳转按钮表单:

<form method="post" action = "">
    {% csrf_token %}
    <button type="submit">ورود (Login)</button>
</form>
<form action="/signup/" method="post">
    {% csrf_token %}
    <button type="submit">ثبت نام (Sign Up)</button>
</form>

URL配置

  • 应用级URL(accounts/urls.py):
from django.urls import path
from accounts.views import *

urlpatterns = [
    path("", home_view, name='home'),
    path("login/", login_view , name='login'),
    path("signup/", signup_view , name='signup')
]
  • 项目根URL(urls.py):
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',include('accounts.urls')),
    path('transitions/',include("transitions.urls"))
]

备注:内容来源于stack exchange,提问作者jwad yari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 09:08:06