[英]Django 1.9 login form.is_valid freaks out
我這里有一個奇怪的問題。 我有一個用戶u = filip pw = filip123
當我鍵入正確的用戶詳細信息時,表單返回false;但是當我反向鍵入(在username域中輸入密碼,在pw域中輸入用戶名)時,form.is_valid()返回true。
request.POST獲得正確的值
views.py
def login(request):
msg = "Login"
form = LoginForm(request.POST)
print (request.POST.get("username"))
print (request.POST.get("password"))
if form.is_valid():
msg = "valid"
print ("asdfa")
user = authenticate(username=request.POST.get("username"), password=request.POST.get("password"))
print (user)
context = {
"msg":msg,
"form": form,
}
return render(request, "login.html", context)
表格
class LoginForm(forms.ModelForm):
class Meta:
model = User
fields = [
"username",
"password"
]
login.html
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{{ form.errors }}
{% endif %}
<h1 style="color:red">{{ msg }}</h1>
<form method="post" action="">
{% csrf_token %}
username<input type="username" name="username">
password<input type="password" name="password">
<input type="submit" value="login" />
</form>
{% endblock %}
編輯,當我輸入真實用戶時的錯誤消息是“您的用戶名和密碼不匹配。請重試。用戶名具有該用戶名的用戶已存在。”
這不是ModelForm的正確用法。 它們用於在數據庫中創建和編輯項目。 該錯誤消息是因為您使用此表單就像創建新用戶一樣,並且由於使用該用戶名的用戶已經存在而使您無法執行此操作。
請改用標准表格。 甚至更好的是,使用django.contrib.auth.forms中的LoginForm。 這樣做的好處是,它會在驗證過程中為您調用身份驗證,以便將登錄錯誤包含在格式錯誤中(而不是像您的代碼一樣完全忽略)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.