欢迎光临
我们一直在努力

如何使用 fastapi 的 Depends,把需要的字段添加到 swagger(openAPI) 的接口文档中?

阅读之前,建议先看这个参考文档:python 如何查看一个函数的参数

先来看看官方样例: Depends for function

https://fastapi.tiangolo.com/zh/tutorial/dependencies/#_3

图片.png

如果是其他的呢?
比如如何给 Depends 传递的是:

  • class?
  • classs instance?

Depends for class

from typing import Any, Optional, List
import uvicorn
from fastapi import FastAPI, Form, Query, Depends
from fastapi import Depends

app = FastAPI()


class AddressFilter():
    def __init__(self, school: str | None = None) -> None:
        pass


@app.get('/')
async def list_object(
    address_filter: AddressFilter = Depends(AddressFilter),
):
    return {}


if __name__ == "__main__":

    uvicorn.run(
        app='api:app',
        host="127.0.0.1",
        port=9950,
        workers=1,
        reload=True
    )

把需要让 openAPI 显示的字段,添加在 class 的 __init__

图片.png

Depends for class instance

from typing import Any, Optional, List
import uvicorn
from fastapi import FastAPI, Form, Query, Depends
from fastapi import Depends

app = FastAPI()


class AddressFilter():
    def __call__(self, school: str | None = None, grade: int = 1) -> None:
        pass


af = AddressFilter()


@app.get('/')
async def list_object(
    address_filter: AddressFilter = Depends(af),
):
    return {}


if __name__ == "__main__":

    uvicorn.run(
        app='api:app',
        host="127.0.0.1",
        port=9950,
        workers=1,
        reload=True
    )

把需要让 openAPI 显示的字段,添加在 class instance 的 __call__

依然可以正常显示

图片.png

以 fastapi_filter 举例

fastapi_filter:

fastapi_filter 用的是 class 方案,动态生成 class

https://segmentfault.com/a/1190000043835216

未经允许不得转载:IT极限技术分享汇 » 如何使用 fastapi 的 Depends,把需要的字段添加到 swagger(openAPI) 的接口文档中?

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址