在寻找验证django表单的方法的过程中,我在django文档中遇到了两个方法:is_valid()和clean().有谁能告诉我它们有什么不同/相同之处吗?这两种方法的优缺点是什么?

谢谢

推荐答案

is_valid()自动调用窗体上的clean().在视图中使用is_valid(),在窗体类中使用clean().

您的clean()函数将返回self.cleaned_data,如果您在下面的视图中注意到,您作为程序员不会处理它.

form = myforms.SettingsForm(request.POST)
if form.is_valid():
   name = form.cleaned_data['name']
   #do stuff

您不必执行clean_data = form.is_valid(),因为is_valid()将调用Clean并覆盖要清除的Form对象中的数据.所以你的第if form.is_valid()个挡路里的一切都是干净有效的.您的挡路中的第name字段将是经过清理的版本,而不一定是第request.POST字段中的字段.

Update

self._errors['email'] = [u'Email is already in use']

现在将返回False,所以在Else挡路中,您可以重新显示包含被覆盖的表单对象的页面,如果您的模板使用错误字符串,它将显示错误消息.

Django相关问答推荐

RDBMS多对多关系Django

如何在Django中将可选参数传递给视图?

Django 关系嵌套related_name

NoneType对象没有属性保存Django

基于模型多选字段在模板django中显示结果

如何根据查询集中的条件返回多个聚合?

"" 需要有字段 "id" 的值才能使用这种多对多关系

django - 表单没有错误,但 form.is_valid() 没有验证

多租户 Django 应用程序:根据请求更改数据库连接?

如果上下文中缺少变量,如何使 Django 模板引发错误

relation "django_site" does not exist

如何在 Django 中向 ModelForm 添加外键字段?

在 virtualenv Ubuntu 12.10 中使用 pip 安装 lxml 错误:command 'gcc' failed with exit status 4

如何在 Django 和 django-jsonfield 中将 JSONField 的默认值设置为空列表?

如何使用 django-nose 运行单个测试或单个 TestCase?

清理提交的表单数据中的 HTML

如何向所有 Django 响应添加 HTTP 标头

Django - 在设置中使用反向 url 映射

Django Rest 框架 ImageField

在 Django REST 框架序列化程序中动态排除或包含字段