• FastAPI 学习之路(五)


    系列文章:

      FastAPI 学习之路(一)fastapi--高性能web开发框架

      FastAPI 学习之路(二)

      FastAPI 学习之路(三)

      FastAPI 学习之路(四)

     我们之前的文章分享了,如何增加参数,那么我们这次分享来看下请求体。

       什么是请求体:请求体是客户端发送给 API 的数据。

            什么是响应体:响应体是 API 发送给客户端的数据。

           大部分的请求都会有请求体的。你不能使用 GET 操作(HTTP 方法)发送请求体。

            


                   

            我们去写一个例子,去定义一下请求体

    from typing import Optional
    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    class Item(BaseModel):
        name: str
        desc: Optional[str] = None
        price: float
    @app.post("/items/")
    def create_item(item: Item):
        return item
    

       那么我们部署下,然后用postman请求下

    可以正常返回我们预期的结果。

     我们在代码中创建数据模型,然后数据模型声明为继承自 BaseModel 的类。

    使用标准的 Python 类型来声明所有属性。

        当一个模型属性具有默认值时,它不是必需的。否则它是一个必需属性。将默认值设为 None 可使其成为可选属性。我们去请求下,当我们不传递desc看下。

    从结果中,我们可以看出,当我们没有传递参数的时候,默认是null,那么我看下如果我们没有定义可选属性的不传递,接口会怎么返回给我们呢。

     我们可以看到,接口已经返回了对应的错误。所以当我们在定义的时候就可以对对应的参数进行是否是可选择的参数。其实我们在定义的时候,也定义了类型,比如我们对应price定义是一个float,但是呢,我们现在给它传递一个str类型,比如五角。

     

      接口返回的是一个类型错误,因为后台在处理的时候呢,默认转化了类型,转化失败,就直接fastapi自动处理完毕了。并且返回了统一格式的返回值。

            我们看下接口文档。

     接口文档默认定义模型将成为生成的 OpenAPI 模式的一部分,并且在交互式 API 文档中展示。

            当然我们前面的请求体是没有做处理,其实我们在实际中还是要处理呢,那么我们如何处理呢,其实很简单,我们看下,当价格大于100,我们返回太贵了。        (西瓜要是100一斤,也很贵了。)

            如何去实现呢。

    from typing import Optional
    from fastapi import FastAPI
    from pydantic import BaseModel
    class Item(BaseModel):
        name: str
        desc: Optional[str] = None
        price: float
    
    app = FastAPI()
    @app.post("/items/")
    async def create_item(item: Item):
        if item.price>100:
            return "太贵了"
        return item

     这样就完成了,那么我们看下。请求是否返回正确,当传递的价格大于100

     当我们去传递的价格小于100时候如何返回呢?

     可以看到这样是符合我们需求的。

     
     
  • 相关阅读:
    java支持跨平台获取cpuid、主板id、硬盘id、mac地址 (兼容windows、Linux)
    Oracle 数据导入导出
    Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
    Liunx下查看服务器硬件信息
    Linux文件类型及如何查看,修改文件读写权限
    Linux ext3 ext4 区别
    网站访问量大 怎样优化mysql数据库
    LeetCode——Coin Change
    LeetCode——two sum
    LeetCode——Edit Distance
  • 原文地址:https://www.cnblogs.com/leiziv5/p/15333821.html
Copyright © 2020-2023  润新知