marshmallow数据校验的神器

marshmallow数据校验的神器,第1张

marshmallow 包的使用

marshmallow 和 django 的序列化器有点像。


可以自定义校验的模型
使用方法如下:

  • 1、定义需要校验的字段
from marshmallow import Schema, fields, EXCLUDE, validate, ValidationError
class User(Schema):
    name = fields.String(required=True,allow_none=True,validate=Length(10,20,error="字符长度不够"),error_messages={"required":"缺少姓名"}) # 对字符串长度的校验,required=True 说明这个字段是必传字段, allow_none = True 说明该字段可以为None值,
    # 校验Length 对字符串长度的校验。


error 不符合要求的错误信息(相对于长度校验器的错误提示)。


if __name__ == '__main__': u = User() validate_data = {"name":"fsfsfsfsfsfsfsf"} res= u.validate(validate_data) print(res)

  • 2、 自定义校验器
class Age(Validator):
    message_min = "年龄小于{min}"
    message_max = "年龄大于{max}"

    def __init__(self, min, max, error=None):
        self.min = min
        self.max = max
        self.error = error

    def _repr_args(self):
        return f"min={self.min!r},max={self.max!r}"

    def _format_error(self, value, message):
        return self.error or message.format(input=value, min=self.min, max=self.max)

    def __call__(self, value):
        if value < self.min:
            message = self.message_min
            raise ValidationError(self._format_error(value, message))
        if value > self.max:
            message = self.message_max
            raise ValidationError(self._format_error(value, message))
class User(Schema):
    name = fields.String(required=True,allow_none=True,validate=Length(10,20,error="字符长度不够"),error_messages={"required":"缺少姓名"})
    age = fields.Int(required=True, validate=Age(18, 60)) # 自定义校验器
  • 3 也支持正则
from marshmallow import Schema, fields, EXCLUDE, validate, ValidationError
from marshmallow.types import Validator
from marshmallow.validate import Length,Email,Equal,Range,OneOf,Regexp
class User(Schema):
    name = fields.String(required=True,allow_none=True,validate=Length(10,20,error="字符长度不够"),error_messages={"required":"缺少姓名"})
    # age = fields.Int(required=True, validate=Age(18, 60)) # 自定义校验器
    age = fields.Int(required=True,validate=Range(18,55,error="年龄必须在18-55之间"),error_messages = {"required": "缺少年龄"})
    address = fields.String(required=True, validate=Length(10,20,error="字符长度不够"),error_messages={"invalid":"字符类型不对"})
    gender = fields.String(required=True,allow_none=True,validate=OneOf(["man","woman"],error="性别只能是男、女"))
    card = fields.String(required=True,validate=Regexp("[0-9a-zA-Z]{8,20}",error="请输入8-20位数字、字母、字母和数字的组合"))

    class Meta:
        unknown = EXCLUDE  # Schema 类中未定义的字段不校验
  • 4 功能很强大,和对接可以使用flask_marshmallow

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/571741.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存