【FastAPI.S01E02】request请求相关:路径参数

【FastAPI.S01E02】request请求相关:路径参数,第1张

文章目录
  • 前言
  • 一、路径参数基础
  • 二、路径参数数值校验
  • 三、路径参数预设值
  • 四、路径参数路径 *** 作配置
  • 总结


前言

最近看了一遍FastAPI的官方文档中的请求部分,自己梳理了一下请求阶段的路径参数、查询参数、请求体、Cookie、Header的大致的使用方法,其中包含了数据校验以及元数据设置等。

以下例子均来自官方文档(本人比较懒,手动狗头)


本次就介绍下 路径参数 的具体使用方法:

一、路径参数基础

通过在装饰器中添加具体的路径,以及类似格式化字符串的方式来设置动态路径,具体代码如下:

import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id:int):
    return {"item_id": item_id}

if __name__ == '__main__':
    uvicorn.run(app)

执行后的可在OpenAPI:http://127.0.0.1:8000/docs 界面查看到具体的接口信息

这里可以明确的说明这个参数是路径参数,item_id下面标注着path字样。

二、路径参数数值校验
  1. 数据校验方式一:使用python3.6以后加入的类型声明方式,那么当你传入具体参数的时候,框架会自动帮助你进行校验,具体从那做方式如下
import uvicorn
from fastapi import FastAPI

app = FastAPI()

@app.get("/items/{item_id}")
async def read_item(item_id:int):
    return {"item_id": item_id}

if __name__ == '__main__':
    uvicorn.run(app)


OpenAPI这里会自动展示你必须输入的入参类型,否则就会报错:

  1. 通过导入 Path来进行数据校验,具体代码如下:
import uvicorn
from fastapi import FastAPI, Path

app = FastAPI()

@app.get("/items/{item_id}")
async def read_items(
    *,
    item_id: int = Path(..., title="The ID of the item to get", gt=0, le=1000),
    q: str,
):
    results = {"item_id": item_id}
    if q:
        results.update({"q": q})
    return results

if __name__ == '__main__':
    uvicorn.run(app)

Path(…)代表着这是个必须输入的参数
title参数 具体还没有看到展示的地址
如果申明的是int或者float,那么一下参数就是对输入数值的规范:

gt:大于(greater than)
ge:大于等于(greater than or equal)
lt:小于(less than)
le:小于等于(less than or equal)

三、路径参数预设值
import uvicorn
from enum import Enum
from fastapi import FastAPI

class ModelName(str, Enum):
    alexnet = "alexnet"
    resnet = "resnet"
    lenet = "lenet"

app = FastAPI()

@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):
    if model_name == ModelName.alexnet:
        return {"model_name": model_name, "message": "Deep Learning FTW!"}
    if model_name.value == "lenet":
        return {"model_name": model_name, "message": "LeCNN all the images"}
    return {"model_name": model_name, "message": "Have some residuals"}

if __name__ == '__main__':
    uvicorn.run(app)

这里引入Enum模块,通过同时继承str和Enum的方式来规定一个预设值中的具体内容,然后在路径 *** 作函数的入参中就可以直接进行类型声明成已有的范围。接下来看下OpenAPI的展现形式:

在这里可以直接选择已经预设的参数,而不可以输入其他信息。

四、路径参数路径 *** 作配置
  1. status_code 状态码
  2. tags 参数
  3. summary 参数
  4. description 参数
  5. docstring 文档字符串
  6. response_description 响应描述
  7. deprecated 弃用路径 *** 作

这里我就用一个例子类具体展示以上所有参数的作用。代码如下:

import uvicorn
from typing import Optional, Set
from fastapi import FastAPI, status
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None
    tags: Set[str] = set()

@app.post("/items/",
          response_model=Item,
          response_description="这里是response_description",
          status_code=status.HTTP_200_OK,
          tags=["这里是tags"],
          summary="这里是summary",
          description="这里是description",
          # deprecated=True
          )
async def create_item(item: Item):
    """
    这里是文档字符串
    :param item:
    :return:
    """
    return item

if __name__ == '__main__':
    uvicorn.run(app)

具体的生效效果如下图所示:

如果将deprecated=True打开以后,这个借口就为弃用的状态:


总结

本来是想着要把request的相关的所有内容都写到一篇里面,但是一个模块我就写了1个小时了,还有些官方文档中的其他技术细节,这里就没有一一列举了,等将来真正使用起来,有使用心得了再继续丰富这里的内容,现在就这样吧,不早了,晚安。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/883466.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-14
下一篇 2022-05-14

发表评论

登录后才能评论

评论列表(0条)

保存