clean_data 和普通数据有啥区别? - django
Posted
技术标签:
【中文标题】clean_data 和普通数据有啥区别? - django【英文标题】:what's the difference between cleaned_data and normal data? - djangoclean_data 和普通数据有什么区别? - django 【发布时间】:2017-06-04 23:55:13 【问题描述】:如标题中所述...有什么区别?
我看到人们一直在说使用cleaned_data
,在视频中人们仍然这么说,但只是说它会清理数据,但是当我使用 print 时
print form.cleaned_data.get('title')
print request.POST.get('title')
不过我看不出有什么不同。起初我以为是那些字符逃逸等,但经过测试,似乎并非如此。
这实际上是首选方式,因为似乎没有差异?
【问题讨论】:
【参考方案1】:您不能信任请求数据,因为它是未经验证的原始数据。您永远不应该使用来自request
的数据并将其存储到您的数据库中。
为了应用程序的顺利运行,您只在数据库中存储有效数据非常重要。 Django 表单cleaned_data
确保您满足或不满足为该表单定义的验证规则。 form.is_valid()
检查您对request.POST
数据的所有验证,并生成包含form.cleaned_data
的有效数据的字典。
所以从forms.cleaned_data
属性中检索到的数据要经过表单验证。这不仅是验证,还可以将数据转换为相关的python类型。
您也可以参考link 了解 Django 表单如何执行验证。
【讨论】:
根据相关的python类型,是指我们在模型中设置的任何字段? 是的。表单的<field>_clean
方法保证返回的是python对象,而不是表单中提交的原始字符串。
对不起,我又多了一个问题,不知何故,如果我们不使用基于 django 的表单,所以不能使用 form.is_valid()
会这样吗? request.data.cleaned_data.get('email')
没有。您必须知道cleaned_data 是django.forms.Form
的属性,您不能写request.data.cleaned_data
,它将引发AttributeError
。
是否有其他方法可以在不使用cleaned_data
属性的情况下清理数据?以上是关于clean_data 和普通数据有啥区别? - django的主要内容,如果未能解决你的问题,请参考以下文章