marshmallow数据校验的神器(python)
marshmallow 包的使用marshmallow 和 django 的序列化器有点像。可以自定义校验的模型使用方法如下:1、定义需要校验的字段from marshmallow import Schema, fields, EXCLUDE, validate, ValidationErrorclass User(Schema):name = fields.String(required=Tru
·
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

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)