使用 django ModelForm 显示错误

dar*_*rko 5 django validation modelform

我无法弄清楚如何控制模型表单的字段验证。

这是我的表格模型:

class UserForm(ModelForm):
    class Meta:
        model = User
        fields = ('email', 'password')
Run Code Online (Sandbox Code Playgroud)

以下是我在模板中呈现表单的方式:

<form method="post" action="">
    {% csrf_token %}
    {{ userform.as_p }}
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

这是我的观点:

def login_page(request):
    if request.method == 'POST':
        userform = UserForm(request.POST)
        if userform.is_valid():
            email = request.POST['email']
            password = request.POST['password']
            user = authenticate(username=email, password=password)
            if user is not None:
                login(request, user)
                return redirect('/dashboard/')
            else:
                # How can I give the user feedback about authentication failute here. Right now it just reloads the form without any messages.
                return render(request, "login.html", {"userform": userform}) 
        else:
            # Because .is_valid() is called, The userform will validate for email addresses and that a password input is present here.
            return render(request, "login.html", {"userform": userform}) 
    else:
        userform = UserForm()
        return render(request, "login.html", {"userform": userform})
Run Code Online (Sandbox Code Playgroud)

从阅读文档来看,这似乎应该像向我的表单传递一些自定义属性一样简单;但由于我正在使用 ModelForm,我不确定这是否是通过相同的方式实现的。

任何人都可以提供有关如何最好地控制 ModelForm 字段错误的示例或提示吗?

谢谢!

Ala*_*air 1

Django身份验证应用程序有一个可供您使用的内置组件AuthenticationForm。如果您查看源代码,您可以看到他们的方法是检查clean方法内的用户名和密码。这样,如果用户名和密码组合无效,则会引发验证错误,并且表单将显示该错误。

您可以AuthenticationForm通过以下导入导入并在登录视图中使用它:

from django.contrib.auth.forms import Authentication
Run Code Online (Sandbox Code Playgroud)

您也许还可以使用内置视图login。这意味着您可以利用添加的功能,例如如果用户未启用 cookie,则显示一条消息。它还减少了创建安全漏洞的机会。