zoukankan      html  css  js  c++  java
  • Django ModelForm 校验数据格式

    发现ModelForm很好用,用来做form表单验证效果很好。但是也要注意几点。

    forms的用法:

    •   使用默认方式:继承forms.Form类,类里面的字段名称一定要和前端HTML里面的form表单里面的name属性一致,当前端数据提交时,通过views视图里面的is_valid()方法自动验证数据是否格式正确。
      class RegisterForm(forms.Form):
          user = forms.CharField(min_length=6,
                                        max_length=20,
                                        error_messages={'required': '用户名不能为空.', 'min_length': "用户名长度不能小于6个字符", 'max_length': "用户名长度不能大于20个字符"}
      )
          pwd=forms.CharField(min_length=8,error_messages={'required': '密码不能为空.', 'min_length': "用户名长度不能小于6个字符"})
          email=forms.EmailField(error_messages={'required': '邮箱不能为空.'})
    •   使用自定义方法:自定义校验方式,定义一个以clean_开头的方法,后面加上需要校验的的字段,注意需要使用一个异常ValidationError 

        

    from django.core.exceptions import ValidationError
     checkCode = fields.CharField(
            error_messages={'required': '验证码不能为空.'}
        )
    # 自定义验证方法
        # 在需要自定义的字段前面加上clean_
    
        def clean_checkCode(self):
            if self.request.session.get('CheckCode').upper() != self.request.POST.get('checkCode').upper():
                raise ValidationError(message='验证码错误', code='invalid')

    如果需要应用request请求,那么可以另外继承一个类,以便引入request

    from django import forms
    from django.forms import fields
    from django.core.exceptions import ValidationError
    
    
    class BaseForm(object):
        def __init__(self, request, *args, **kwargs):
            self.request = request
            super(BaseForm, self).__init__(*args, **kwargs)
    
    
    class Register(BaseForm, forms.Form):
    
        account = fields.RegexField('[a-zA-Z]+[0-9]{0,32}',
                                   min_length=8,
                                   max_length=32,
                                   error_messages={r'required': '不能为空', 'invalid': '以字母开头,包含字母,数字',
                                                   'max_length': '不能大于32位', r'min_length': '不能小于8位'})
        password = fields.RegexField(
            '^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%^&*()])[0-9a-zA-Z!@#$\%^&*()]{3,32}$',
            min_length=3,
            max_length=32,
            error_messages={'required': '密码不能为空.', 'invalid': '密码必须包含数字,字母、特殊字符', 'min_length': "密码长度不能小于3个字符",
                            'max_length': "密码长度不能大于32个字符"}
        )
        email = fields.EmailField(error_messages={
            'required': '邮箱不能为空',
            'invalid': '邮箱格式不正确'
        })
        checkCode = fields.CharField(
            error_messages={'required': '验证码不能为空.'}
        )
    # 自定义验证方法
        # 在需要自定义的字段前面加上clean_
    
        def clean_checkCode(self):
            if self.request.session.get('CheckCode').upper() != self.request.POST.get('checkCode').upper():
                raise ValidationError(message='验证码错误', code='invalid')

    如何校验数据呢

      使用forms.Form的子类(就是刚才你建立的),将前端请求的数据当做参数创建对象,当对象调用is_valid()方法时,它将自动校验同名的数据。

    clean():是获取验证通过的字段的方法。

    error是获取验证失败的字段的失败信息:

      error.as_json():将信息转化成json格式的字符串 例如:(

    {"account": [{"message": "u4e0du80fdu4e3au7a7a", "code": "required"}], "password": [{"message": "u5bc6u7801u4e0du80fdu4e3au7a7a.", "code": "required"}], "email":[{"message": "u90aeu7bb1u4e0du80fdu4e3au7a7a", "code": "required"}], "checkCode": [{"message": "u9a8cu8bc1u7801u4e0du80fdu4e3au7a7a.", code": "required"}]})

      error.as_data():获取失败信息,不过其中是ValidationError对象  例如:({'account': [ValidationError(['不能为空'])], 'password':[ValidationError(['密码不能为空.'])], 'email': [ValidationError(['邮箱不能为空'])], 'checkCode': [ValidationError(['验证码不能为空.'])]}

      error.as_text():获取信息内容: 例如:(

    * account
    * 不能为空
    * password
    * 密码不能为空.
    * email
    * 邮箱不能为空
    * checkCode
    * 验证码不能为空.

    但是如何获取json字符串勒

      那就是使用as_json(),他获取json格式的字符串,可以使用json.loads()变成json()格式,在前端解析的时候使用JSON.parse()方法获取内容,同事还能够避免编码的问题

  • 相关阅读:
    mysql启动报错:Another MySQL daemon already running with the same unix socket.
    DRBD编译安装中出现的问题及解决小结
    DRBD+Heartbeat+Mysql高可用环境部署
    LVS三种包转发模型调度算法
    nagios环境部署(rhel6.5)
    reorder-list
    二叉树的前序遍历(不用递归)
    最大正方形
    名字的漂亮度
    计算字符个数
  • 原文地址:https://www.cnblogs.com/wbdream/p/10460553.html
Copyright © 2011-2022 走看看