码迷,mamicode.com
首页 > 其他好文 > 详细

Django_form验证

时间:2017-08-31 14:22:36      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:self   返回   mit   name   利用   from   model   pre   没有   

需求:

  当用户向Django后端以post提交数据的时候,无论前端是否进行数据合法验证,后端都需要对客户端提交过来的数据进行数据合法性验证,是否可以利用models中表类字段的约束来实现验证,并且可以进一步对某个单独的字段进行自定义验证,并保存呢?

那,如何满足这个需求呢?

  1. 从Django中 导入forms
  2. 定义一个form类,继承forms.ModelForm
  3. 类中定义一个Meta,指定model=表类名, fields=[ ] 列表中添加想要验证的字段
  4.  在和Meta同级定义一个 def函数,函数名为:clean_字段名 方式进行对某个字段的特殊处理,并可以改变这个字段的属性
  5.  view中导入这个form类,实例化时候,把request.POST传递进去,通过object.is_valid()判断是否验证成功,验证失败通过object.errors提交错误信息
  6. 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验证

标签:self   返回   mit   name   利用   from   model   pre   没有   

原文地址:http://www.cnblogs.com/2bjiujiu/p/7457815.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!