zoukankan      html  css  js  c++  java
  • FastAPI(16)- 额外的数据类型

    常见的数据类型

    • int
    • float
    • str
    • bool

    但 FastAPI 支持使用更复杂的数据类型

    仍然能得到 FastAPI 的支持

    • IDE 智能提示
    • 请求数据的数据类型转换
    • 响应数据的数据类型转换
    • 数据验证
    • 自动注释和文档

    复杂的数据类型

    UUID

    • 常见的唯一标识符
    • str 类型

    datetime.datetime

    • Python 的 datetime.datetime
    • str 类型
    • 栗子:2008-09-15T15:53:00+05:00

    datetime.date

    • Python 的 datetime.date
    • str 类型
    • 栗子:2008-09-15

    datetime.time

    • Python 的 datetime.time
    • str 类型
    • 栗子:15:53:00.003

    datetime.timedelta

    • Python 的 datetime.timedelta
    • float 类型
    • 表示秒数

    frozenset

    • set 类型
    • 在请求中,将读取一个列表,消除重复项并将其转换为一个集合
    • 在响应中,集合将被转换为列表
    • 会在 Schema 中加一个标识 uniqueItems,表示 set 里面的值是唯一的

    bytes

    • Python 标准类型 bytes
    • str 类型
    • 生成 Schema 会指定它为一个带有二进制格式的 str

    Decimal

    • Python 标准类型十进制
    • float 类型

    重点

    • FastAPI 不只是有以上的复杂数据类型,更多的数据类型可以看 Pydantic Types
    • 只要 Pydantic 有的,FastAPI 都支持

    复杂数据类型的栗子

    #!usr/bin/env python
    # -*- coding:utf-8 _*-
    """
    # author: 小菠萝测试笔记
    # blog:  https://www.cnblogs.com/poloyy/
    # time: 2021/9/21 1:58 下午
    # file: 14_extra.py
    """
    import uuid
    from datetime import datetime, time, timedelta
    from decimal import Decimal
    from typing import Optional
    from uuid import UUID
    import uvicorn
    from fastapi import Body, FastAPI
    
    app = FastAPI()
    
    
    @app.put("/items/{item_id}")
    async def read_items(
    
            item_id: UUID,
            start_datetime: Optional[datetime] = Body(None),
            end_datetime: Optional[datetime] = Body(None),
            repeat_at: Optional[time] = Body(None),
            process_after: Optional[timedelta] = Body(None),
            address: Optional[frozenset] = Body(None),
            computer: Optional[bytes] = Body(None),
            age: Optional[Decimal] = Body(None),
    ):
        start_process = start_datetime + process_after
        duration = end_datetime - start_process
        return {
            "item_id": item_id,
            "start_datetime": start_datetime,
            "end_datetime": end_datetime,
            "repeat_at": repeat_at,
            "process_after": process_after,
            "start_process": start_process,
            "duration": duration,
            "address": address,
            "computer": computer,
            "age": age,
        }
    
    
    if __name__ == "__main__":
        print(uuid.uuid1())
        uvicorn.run(app="14_extra:app", host="127.0.0.1", port=8080, reload=True, debug=True)

    正确传参的请求结果

    校验错误的请求结果

    查看 Swagger API 文档

  • 相关阅读:
    Git仓库操作笔记[Git repositories]
    supervisor 使用
    python动态加载(二)——动态加载类
    python动态加载(一)——加载方法
    python连接hdfs常用操作
    python对文件进行并行计算初探
    python加载包顺序和PYTHONPATH
    python实现读取数据库的断点续传
    python实现读取文件的断点续传
    python启动一个新进程
  • 原文地址:https://www.cnblogs.com/poloyy/p/15316562.html
Copyright © 2011-2022 走看看