zoukankan      html  css  js  c++  java
  • python进阶(22)pydantic--数据类型校验

    pydantic库的作用

    • pydantic库是一种常用的用于数据接口schema定义与检查的库。
    • Pydantic 在运行时强制执行类型提示,并在数据无效时提供用户友好的错误信息。
       

    pydantic安装

    pip install pydantic
    

    用法详解

    模型

    • pydantic中定义对象的主要方法是通过模型(模型是继承自 BaseModel 的类)。
    • 将模型看作严格类型语言中的类型(例如Java),或者看作API中单个端点的需求。
    • 不受信任的数据可以传递给模型,在解析和验证之后,pydantic保证结果模型实例的字段将符合模型上定义的字段类型。

    注意事项

    • pydantic是一个解析库,而不是一个验证库。
    • 验证是达到目的的一种手段:构建符合所提供的类型和约束的模型。
    • 换句话说,pydantic保证输出模型的类型和约束,而不是输入数据。
       

    基础模型使用

    from pydantic import BaseModel
    
    
    class User(BaseModel):
        id: int
        name = "Silent丿丶黑羽"
    
    • User这是一个有两个字段的模型
    • id是一个整型,必填项
    • name是一个有默认值的字符串,不是必填项

    为什么name字段不需要声明类型

    • name 的类型是从其默认值推断来的,因此,类型注解不是必需的
    • 有些字段没有指定类型,可能会引发字段顺序的警告
    user = User(id="123")
    print(type(user))  # <class '__main__.User'>
    print(user)  # id=123 name='Silent丿丶黑羽'
    

    这里的 userUser 的一个实例。对象的初始化会执行所有解析和验证,如果没有引发 ValidationError 异常,则表明结果模型实例是有效的。

    这里我们传入了的id是一个字符串,但实际打印出来却是整型,是因为pydantic在数据传输时会直接进行数据转换
     

    模型属性

    模型有多个属性和方法,我们依次介绍
     

    dict()

    返回模型的字段和值的字典

    user = User(id=123)
    print(user.dict())  # {'id': 123, 'name': 'jkc'}
    print(type(user.dict()))  # <class 'dict'>
    

    json()

    返回表示 dict()JSON 字符串

    user = User(id=123)
    print(user.json())  # {"id": 123, "name": "jkc"}
    print(type(user.json()))  # <class 'str'>
    

    copy()

    返回模型的拷贝,默认是浅拷贝

    user = User(id=123)
    print(user.copy())  # id=123 name='jkc'
    

    parse_obj()

    这与模型的_init__方法非常相似,只是它采用dict而不是关键字参数。如果传递的对象不是dict,将引发ValidationError

    user = User(id=123)
    print(user.parse_obj({"id": 3, "name": "jkc"}))  # id=3 name='jkc'
    print(user.parse_obj(['a']))  # 引发ValidationError错误
    

    parse_raw()

    用于加载多种格式字符串的实用程序

    user = User(id=123)
    print(user.parse_raw('{"id": 3, "name": "jkc"}'))  # id=3 name='jkc'
    

    parse_file()

    parse_raw() 类似,但是是接收文件路径,读取文件并将内容传递给parse_raw

    path = Path('data.json')
    path.write_text('{"id": 123, "name": "James"}')
    m = User.parse_file(path)
    print(m)  # id=123 signup_ts=None name='James'
    

    schema()

    返回以 JSON Schema 形式返回模型,以字典格式

    user = User(id=123, name="jkc")
    print(user.schema())
    print(type(user.schema()))
    
    # 输出结果
    {
        "title":"User",
        "type":"object",
        "properties":{
            "id":{
                "title":"Id",
                "type":"integer"
            },
            "name":{
                "title":"Name",
                "default":"jkc",
                "type":"string"
            }
        },
        "required":[
            "id"
        ]
    }
    
    <class 'dict'>
    

    schema_json()

    返回以 JSON Schema 形式返回模型,以JSON字符串形式

    user = User(id=123, name="jkc")
    print(user.schema_json())
    print(type(user.schema_json()))
    
    # 输出结果
    {
        "title":"User",
        "type":"object",
        "properties":{
            "id":{
                "title":"Id",
                "type":"integer"
            },
            "name":{
                "title":"Name",
                "default":"jkc",
                "type":"string"
            }
        },
        "required":[
            "id"
        ]
    }
    
    <class 'str'>
    

    fields_set

    返回用户初始化对象时提供了什么字段

    user = User(id=123)
    print(user.__fields_set__)  # {'id'}
    
    user = User(id=123, name="jkc")
    print(user.__fields_set__)  # {'name', 'id'}
    

    config

    模型的配置类(后续更新)

  • 相关阅读:
    PageRequestManager 综述
    【转】浏览器集成教学 自定义浏览器
    COM(四)注册
    关于/ENTRY (EntryPoint Symbol)
    COFF文件
    【转】用系统默认浏览器打开Microsoft Web Browser控件触发的超链接
    Scroll Bar 控件
    COM(一)CoCreateInstance
    Web相关概念
    WebBrowser Control(一)禁止表单数据提示对话框
  • 原文地址:https://www.cnblogs.com/jiakecong/p/15500268.html
Copyright © 2011-2022 走看看