• FastAPI 基础学习(六) Request Body(I)


    作者:麦克煎蛋   出处:https://www.cnblogs.com/mazhiyong/ 转载请保留这段声明,谢谢!

    Request Body是从客户端发送到API端的数据内容。

    一、单个Request Body

    通过以下几个简单环节我们就可以完成对Request Body的处理。

    1、导入Pydantic BaseModel

    from pydantic import BaseModel

    2、创建数据模型

    声明需要的数据模型,并且继承自BaseModel。

    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None

    模型属性均基于标准的Python类型。

    注意,与请求参数类似,如果模型属性有缺省值,那么就意味着它不是必须的,如果缺省值是None,则意味着是可选的;否则,它就是必须的。

    3、参数声明

    我们用声明路径参数和请求参数同样的方式来声明Request Body参数。

    @app.post("/items/")
    async def create_item(item: Item):
        return item

    通过以上的几个环节,FastAPI就实现了以下功能:

    (1)、从Request中解析出Body内容,并且输出格式为JSON。

    (2)、如果需要,进行相应的数据类型转换。

    (3)、校验数据,如果校验失败则返回详细错误信息。

    (4)、通过声明的参数对象来接收最终数据内容。

    4、使用数据模型

    你可以直接访问数据模型的所有属性。

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    
    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None
    
    
    app = FastAPI()
    
    
    @app.post("/items/")
    async def create_item(item: Item):
        item_dict = item.dict()
        if item.tax:
            price_with_tax = item.price + item.tax
            item_dict.update({"price_with_tax": price_with_tax})
        return item_dict

    实际运行示例如下:

    5、同时使用Request Body参数、路径参数、请求参数

    你可以同时声明Request Body参数、路径参数、请求参数这几种不同类型的参数。

    FastAPI会自动识别不同类型的参数,并且赋予参数对象正确的数据内容。

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    
    class Item(BaseModel):
        name: str
        description: str = None
        price: float
        tax: float = None
    
    
    app = FastAPI()
    
    
    @app.put("/items/{item_id}")
    async def create_item(item_id: int, item: Item, q: str = None):
        result = {"item_id": item_id, **item.dict()}
        if q:
            result.update({"q": q})
        return result

    函数参数按照如下的顺序进行识别匹配:

    (1)、如果这个参数已经在路径中被声明过,那么它就是一个路径参数。

    (2)、如果这个参数的类型是单类型的(如str、float、int、bool等),那么它就是一个请求参数。

    (3)、如果这个参数的类型是Pydantic数据模型,那么它就被认为是Request Body参数。

  • 相关阅读:
    POJ_1066_Treasure Hunt_判断线段相交
    【转载】VS写汇编程序01:VS2015配置汇编语言开发环境
    【转载】汇编调试程序Debug使用
    【转载】C++ STL快速入门
    Longest Palindromic Substring
    Leetcode经典试题:Longest Substring Without Repeating Characters解析
    C++数组的初始化
    C++题目:回文数判断
    C++-int类型整数超出范围后的处理
    Memorise Me!——用数值做地址,实现快速查找
  • 原文地址:https://www.cnblogs.com/mazhiyong/p/12902149.html
Copyright © 2020-2023  润新知