栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python 之 参数校验《二》 pydantic

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python 之 参数校验《二》 pydantic

from enum import Enum, IntEnum
from datetime import datetime, date

from typing import List, Union
from typing import Optional
from pydantic import BaseModel, Field, ValidationError, validator

class UserModel(BaseModel):
    user_id: int                            # 必传项, 可以为int 可以str类型int
    username: str                           # 必传项, 可以为int 可以str类型int
    gender: str                             # 必传值, 此处为自定义校验
    active: bool = False                    # bool 类型 默认值 False
    school = "吹灯大学"                      # 添加新字段修改值
    address: str = Field(alias="addr")      # 将传入addr输出为address

    create_time: datetime
    merge: Union[int, str]                  # 数据可以允许多种数据类型  zhangsan, 123 均可
    age: Optional[int]                      # 非必传参数, 默认值为None
    tag: List[int] = []                     # 传入数组类型

    @validator("gender")
    def check_gender(cls, v):
        if v not in ["male", "female"]:
            raise ValueError("sex is wrong!!!")
        return v
data =  {
    "user_id": 12345,
    "username": 1456789,
    "age": 18,
    "gender": "male",
    "addr": "北京潘家园",
    'aa': False,
    'tag': [1, '2', 3],
    "create_time": "2022-09-12 03:04:05",
    "merge": "123a"
}
try:
    user = UserModel(**data)
    print(user.dict())
    print(user.json())
except ValidationError as e:
    print(e)
 
{'user_id': 12345, 'username': '1456789', 'gender': 'male', 'active': False, 'address': '北京潘家园', 'create_time': datetime.datetime(2022, 9, 12, 3, 4, 5), 'merge': '123a', 'age': 18, 'tag': [1, 2, 3], 'school': '吹灯大学'}
{"user_id": 12345, "username": "1456789", "gender": "male", "active": false, "address": "u5317u4eacu6f58u5bb6u56ed", "create_time": "2022-09-12T03:04:05", "merge": "123a", "age": 18, "tag": [1, 2, 3], "school": "u5439u706fu5927u5b66"}

枚举类型校验

class GenderEnum(IntEnum):
    male = 0
    female = 1


class ShirtEnum(str, Enum):
    S = "Small"
    M = "Medium"
    L = "Large"


class ConfigModel(BaseModel):
    user_id: int
    username: str
    gender: GenderEnum
    shirt: ShirtEnum = ShirtEnum.S  # 设置默认

data =  {
    "user_id": 12345,
    "username": 1456789,
    "book": 2,
    "shirt": "Small"
    "test": "zhangsan"
}

user = ConfigModel(**data)
print(user.dict())         
print(user.gender.value)  # 输出值   0
print(user.shirt.value)   # 输出值   Small

{'user_id': 12345, 'username': '1456789', 'gender': , 'shirt': }
  • 高级复杂检查
class SchoolModel(BaseModel):
    sch_id: int = 100
    school: str


class UserModel(BaseModel):
    user_id: int                            # 必传项, 可以为int 可以str类型int
    username: str                           # 必传项, 可以为int 可以str类型int
    age: int = 18                           # 默认值 18
    gender: GenderEnum


class UserListModel(BaseModel):

    tag: List[int] = []
    school: SchoolModel
    users: List[UserModel]


data = {
    "tag": [1, 3, '5', 7],
    "school": {"sch_id": 12345, "school": "上海中学"},
    "users": [
        {"user_id": 12345, "username": "zhangsan", "gender": 1, "book": 2},
        {"user_id": 12354, "username": "lisi", "gender": 1, "book": 2},
        {"user_id": 12543, "username": "wanger", "gender":1, "book": 2},
    ]
}



user = UserListModel(**data)
print(user.dict())         
print(user.school.sch_id)   #  输出值   上海中学
print(user.users) 

{'tag': [1, 3, 5, 7], 'school': {'sch_id': 12345, 'school': '上海中学'}, 'users': [{'user_id': 12345, 'username': 'zhangsan', 'age': 18, 'gender': }, {'user_id': 12354, 'username': 'lisi', 'age': 18, 'gender': }, {'user_id': 12543, 'username': 'wanger', 'age': 18, 'gender': }]}

[UserModel(user_id=12345, username='zhangsan', age=18, gender=), UserModel(user_id=12354, username='lisi', age=18, gender=), UserModel(user_id=12543, username='wanger', age=18, gender=)]

其它可参考

https://blog.csdn.net/codename_cys/article/details/107675748

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/875225.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号