繁体   English   中英

Django 1.9登录表单.is_valid异常

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM