Django_form验证
Posted 北门吹雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django_form验证相关的知识,希望对你有一定的参考价值。
需求:
当用户向Django后端以post提交数据的时候,无论前端是否进行数据合法验证,后端都需要对客户端提交过来的数据进行数据合法性验证,是否可以利用models中表类字段的约束来实现验证,并且可以进一步对某个单独的字段进行自定义验证,并保存呢?
那,如何满足这个需求呢?
- 从Django中 导入forms
- 定义一个form类,继承forms.ModelForm
- 类中定义一个Meta,指定model=表类名, fields=[ ] 列表中添加想要验证的字段
- 在和Meta同级定义一个 def函数,函数名为:clean_字段名 方式进行对某个字段的特殊处理,并可以改变这个字段的属性
- view中导入这个form类,实例化时候,把request.POST传递进去,通过object.is_valid()判断是否验证成功,验证失败通过object.errors提交错误信息
- form验证成功的数据,放在object.cleaned_data中,以字典的形式存放
__author__ = \'beimenchuixue\' __blog__ = \'http://www.cnblogs.com/2bjiujiu/\' # form.py文件中 import re # 此form验证用户咨询表UserAsk中三个字段,name、mobile、course_name # Meta直接利用数据库的约束条件进行字段验证,但是mobile的值要经过特殊验证 class UserAskFrom(forms.ModelForm): class Meta: model = UserAsk fields = [\'name\', \'mobile\', \'course_name\'] def clean_mobile(self): # 对手机号码进行严格验证clean_+字段名 mobile = self.cleaned_data[\'mobile\'] REGEX_MOBILE = \'^1[358]\\d{9}|^147\\d{8}|^176\\d{8}$\' p = re.compile(REGEX_MOBILE) if p.match(mobile): return mobile else: return forms.ValidationError(u\'手机号码错误\', code=\'mobile_invalid\') # view.py文件中 # view中实例化时候,直接通过实例对象.save(commit=True)保存验证好的数据 class AddUserAskView(View): """课程咨询""" def post(self, request): # 把request.POST传递进去,要求post的key值和form中fields保持一致 user_ask_form = UserAskFrom(request.POST) if user_ask_form.is_valid(): # 验证成功直接保存, commit=True 表示提交 user_ask_form.save(commit=True) # 对前端传过来的文件,进行验证并且保存,文件传输,必须保证为用户已经验证登录 # 以用户更换头像为例子,LoginRequiredMixin要求登录的基类 :http://www.cnblogs.com/2bjiujiu/p/7452902.html class UpLoadImageView(LoginRequiredMixin, View): """更换图片""" def post(self, request): # 对于上传的文件,放到request.FILES中,instance=request.user指定验证表字段中的一个唯一数据,对该数据有就更新,没有就增加 image_form = UpLoadImageForm(request.POST, request.FILES, instance=request.user) if image_form.is_valid(): # 自己通过表单对象save方法进行保存数据 image_form.save() # 返回json数据,包含状态码 return HttpResponse("{\'status\':\'success\'}", content_type=\'application/json\') else: return HttpResponse("{\'status\':\'fail\'}", content_type=\'application/json\')
以上是关于Django_form验证的主要内容,如果未能解决你的问题,请参考以下文章