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


前言

最近看了一遍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个小时了,还有些官方文档中的其他技术细节,这里就没有一一列举了,等将来真正使用起来,有使用心得了再继续丰富这里的内容,现在就这样吧,不早了,晚安。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值