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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)