簡體   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