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
相关产品推荐
相关产品推荐

