【问题标题】:Django form not raising ValidationError for invalid emailDjango 表单没有为无效电子邮件引发 ValidationError
【发布时间】:2013-09-28 21:36:16
【问题描述】:

所以我有一个看起来像这样的表单,我知道它可以工作,因为将某些字段留空会在错误字典中提供正确的错误消息,但电子邮件似乎没有正确验证

forms.py

class NewUserForm(Form):
    username = UsernameField(required=True)
    password = CharField(required=True, widget=PasswordInput())
    email = EmailField(required=True)

然后在 views.py 我有

form = NewUserForm(request.POST)
    if form.is_valid(): 
        # Do stuff

当我输入诸如 blah 之类的电子邮件时,它应该会失败,因为没有“@”(这会导致 ValidationError)被抛出,如

中所述

https://github.com/django/django/blob/master/django/core/validators.py (第 105 行)

我不知道我做错了什么。事实上,即使我没有输入任何电子邮件,它甚至都没有说明该字段是必填字段

【问题讨论】:

  • 如何在模板中显示表单?添加打印或日志语句以检查 request.POST 包含的内容。

标签: python django validation validationerror


【解决方案1】:

表单对象尝试/排除验证错误。如果您想显示带有错误的表单,您必须这样做:

form = NewUserForm(request.POST)
context = {}
if form.is_valid(): 
    # Do stuff
else:
    # "is_valid()" fills the errors and non_field_errors attributes of the form, you can render it now
    context['myform'] = form
    render_to_response('mytemplate.html', context, context_instance = RequestContext(request))

在您的模板中,{{ form }}{{ form.as_p }}{{ form.as_ul }} 会将带有错误的表单呈现为红色。

【讨论】:

    猜你喜欢
    • 2013-02-02
    • 1970-01-01
    • 2017-04-04
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-08
    • 2020-05-20
    • 2018-05-18
    相关资源
    最近更新 更多