django的form验证机制
2013-06-25 14:53
447 查看
今天遇到了一个奇怪的问题,django中formview一直返回200,但是却没有执行form_valid方法,然后在其中加了一个form_invalid方法:
class StudentRegisterMixin(generic.FormView):
def get_form_class(self):
def get_success_url(self):
def form_valid(self, form):
def form_invalid(self, form):
print "form is not valid, errors are: "
print form.errors
return http.HttpResponse(form.errors)
把这个错误打印出来,然后发现总是一个地区district的域有错误,经过检查,发现是前端传过来的数据是一个字符0,这样form验证的时候不会把它当作空,
而district的域定义是这样:
district = forms.ModelChoiceField(
required=False,
queryset=core_models.District.objects.all(),
)
也就是说他有一个queryset,这个queryset会根据前端传过来的值到数据库中去找,找到了才会把其加入到cleaned_data中
而django form验证的机制是,先调用clean()方法,得到cleaned_data,再调用clean_field方法,调用开发者对各个域附加的验证方法。。
而cleaned_data中没有的关键字是不会调用clean_field方法的。。。
这个错误找了老半天。。终于在stackoverflow和文档的帮助下解决了,解决方法是重写clean方法:
def clean(self):
super(StudentCreationForm, self).clean()
print "cleaned_data is : ", self.cleaned_data
if 'district' in self._errors:
del self._errors['district']
self.cleaned_data['district'] = None
return self.cleaned_data
这样就可以忽略掉由于district而产生的错误了。
class StudentRegisterMixin(generic.FormView):
def get_form_class(self):
def get_success_url(self):
def form_valid(self, form):
def form_invalid(self, form):
print "form is not valid, errors are: "
print form.errors
return http.HttpResponse(form.errors)
把这个错误打印出来,然后发现总是一个地区district的域有错误,经过检查,发现是前端传过来的数据是一个字符0,这样form验证的时候不会把它当作空,
而district的域定义是这样:
district = forms.ModelChoiceField(
required=False,
queryset=core_models.District.objects.all(),
)
也就是说他有一个queryset,这个queryset会根据前端传过来的值到数据库中去找,找到了才会把其加入到cleaned_data中
而django form验证的机制是,先调用clean()方法,得到cleaned_data,再调用clean_field方法,调用开发者对各个域附加的验证方法。。
而cleaned_data中没有的关键字是不会调用clean_field方法的。。。
这个错误找了老半天。。终于在stackoverflow和文档的帮助下解决了,解决方法是重写clean方法:
def clean(self):
super(StudentCreationForm, self).clean()
print "cleaned_data is : ", self.cleaned_data
if 'district' in self._errors:
del self._errors['district']
self.cleaned_data['district'] = None
return self.cleaned_data
这样就可以忽略掉由于district而产生的错误了。
相关文章推荐
- django 的ajax 请求,使用form的验证机制。
- Django-Form表单验证
- ExtJS 的表单验证机制(Form Validation)
- 3.为网站添加安全机制——windows与Form验证。
- django form 验证
- 框架----Django之Form提交验证(一)
- 使用Django的ModelForm对表单进行自动验证(可自定义验证规则)
- Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)
- django form 验证end_time不小于start_time
- django学习笔记---form组件验证,如何给form组件添加样式
- django form 验证
- Django 博客项目02 Form验证+ 上传头像(预览)+Ajax用户注册
- python3开发进阶-Django框架中form的查看校验方法is_valid()的源码,自定义验证方法
- Django在form提交CSRF验证失败. 相应中断问题
- django用户验证机制
- django 的form组件(验证原理的流程)--2
- Django之form表单提交并验证
- 为网站添加安全机制,windows与Form验证。
- Python自动化运维系列之Django Form表单验证
- 四【用django2.0来开发】后台会员管理(二) ModelForm表单的使用方法以及数据验证