在传递POST / GET提交的输入值之前,设置cd = form.cleaned_data有什么意义?有什么意义,为什么有必要(如果是这样的话)?
答案 0 :(得分:23)
在传递输入值之前没有必要使用表单的.cleaned_data属性,如果在绑定表单中调用.is_valid()之前执行它,或者如果您尝试访问它,则会引发AttributeError未绑定的表单,read more about Form.cleaned_data。
此外,通常最好在表单方法中抽象使用表单的数据以封装逻辑
在您的观看中,您应该使用表单的传统方式如下:
if request.method == 'POST':
form = MyForm(request.POST) # Pass the resuest's POST/GET data
if form.is_valid(): # invoke .is_valid
form.process() # look how I don't access .cleaned_data in the view
在您的表单中:
class MyForm(forms.Form):
my_field = forms.CharField()
def process(self):
# Assumes .cleaned_data exists because this method is always invoked after .is_valid(), otherwise will raise AttributeError
cd = self.cleaned_data
# do something interesting with your data in cd
# At this point, .cleaned_data has been used _after_ passing the POST/GET as form's data
答案 1 :(得分:4)
一旦is_valid()返回True,您就可以处理表单提交安全,因为它知道它符合表单定义的验证规则。虽然此时您可以直接访问request.POST,但最好访问form.cleaned_data。此数据不仅已经过验证,而且还将为您转换为相关的Python类型。