[英]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.