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()方法获取内容,同事还能够避免编码的问题

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    leetcode 213. 打家劫舍 II JAVA
    leetcode 48. 旋转图像 java
    leetcode 45. 跳跃游戏 II JAVA
    leetcode 42. 接雨水 JAVA
    40. 组合总和 II leetcode JAVA
    24. 两两交换链表中的节点 leetcode
    1002. 查找常用字符 leecode
    leetcode 23. 合并K个排序链表 JAVA
  • 原文地址:https://www.cnblogs.com/wbdream/p/10460553.html
Copyright © 2011-2022 走看看