zoukankan      html  css  js  c++  java
  • Python

    前言

    为啥要学这个,因为 FastAPI 是基于它进行开发的,而且是个不错的框架,所以有必要深入学习

    前置学习

    Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html

    typing 模块:https://www.cnblogs.com/poloyy/p/15150315.html

    Pydantic 介绍

    • 使用 python 类型注释来进行数据校验和 settings 管理
    • pydantic 可以在代码运行时强制执行类型提示,并在数据校验无效时提供友好的错误提示
    • 定义数据应该如何在规范的 python 代码中保存,然后通过 Python 验证它

    Pydantic 安装

    pip install pydantic

      

    测试 pydantic 是否已编译

    import pydantic
    
    print('compiled:', pydantic.compiled)
    
    
    # 输出结果
    compiled: True

    Pydantic 注意事项

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

    Models

    简介

    • 在 pydantic 中定义对象的主要方法是通过模型(模型是从 BaseModel 继承的类)
    • 所有基于 pydantic 的数据类型本质上都是一个 BaseModel 
    • 可以将模型视为强类型语言中的类型(比如 Java)
    • 不受信任的数据可以传递给模型,经过解析和验证后,pydantic 保证生成的模型实例的字段将符合定义的字段类型(实例字段类型符合类定义的字段类型)

    基础模型使用

    from pydantic import BaseModel
    
    class User(BaseModel):
        id: int
        name = "小菠萝测试笔记"
    • User 就是一个模型(Models),有两个字段(属性)
    • id,整数 int 类型,是必传的
    • name,字符串 string 类型,不是必传,有默认值

    为什么能知道 name 是 string 类型?

    因为默认值是 string 类型,因此不需要类型提示( name : string )

    注意:当某些字段没有类型提示时,需要注意有关字段顺序的警告

    声明一个有效实例

    user = User(id='123')
    •  user 是 User 模型的一个实例对象,就叫模型实例对象吧
    • 对象的初始化会执行所有解析和验证,如果没有抛出 ValidationError,证明生成的模型实例是有效的

      

    访问模型实例对象的属性

    user = User(id='123')
    print(user.id, type(user.id))
    print(user.name, type(user.name))
    
    
    # 输出结果
    123 <class 'int'>
    小菠萝测试笔记 <class 'str'>
    • id 属性传的是字符串 '123',它会根据模型字段类型进行转换为 int
    • name 属性取了默认值

    __fields_set__

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

    # __fields_set__
    user = User(id='123')
    
    print(user.__fields_set__ == {'id'})
    print(user.__fields_set__ == {'name'})
    
    
    
    user = User(id='123', name="test")
    
    print(user.__fields_set__ == {'id', 'name'})
    print(user.__fields_set__ == {'id'})
    
    
    # 输出结果
    True
    False
    True
    False

    dict()

    可以提供字段的字典对象

    # dict()
    user = User(id='123')
    print(user.dict())
    print(dict(user))
    
    
    # 输出结果
    {'id': 123, 'name': '小菠萝测试笔记'}
    {'id': 123, 'name': '小菠萝测试笔记'}

      

    修改模型实例对象的属性

    # 修改模型实例属性值
    user = User(id='123')
    user.id = 321
    print(user.id)
    
    
    # 输出结果
    321

    BaseModels 属性

    其实就是 BaseModels 有什么自带的方法、属性

    dict()

    返回模型字段和值,字典格式

    user = User(id='123', name="test")
    print(user.dict(), type(user.dict()))
    
    
    # 输出结果
    {'id': 123, 'name': 'test'} <class 'dict'>

    json()

    返回模型字段和值,json 字符串格式

    user = User(id='123', name="test")
    print(user.json(), type(user.json()))
    
    # 输出结果
    {"id": 123, "name": "test"} <class 'str'>

    schema()

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

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

    schema_json()

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

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

      

    copy()

    浅拷贝模型对象

  • 相关阅读:
    django的json返回值带有汉字的处理
    easyui datagrid插件对返回数据的预处理
    easyui checkbox
    江西师大教育技术学硕士研究生培养方向介绍
    杯水人生
    成员管理及membership
    一份网络教育应用试题
    国外十大搜索引擎
    本科生毕业论文格式结构
    FCKeditor配置参考文章
  • 原文地址:https://www.cnblogs.com/poloyy/p/15158713.html
Copyright © 2011-2022 走看看