其他分享
首页 > 其他分享> > FastAPI(31)- Sub-dependencies 子依赖

FastAPI(31)- Sub-dependencies 子依赖

作者:互联网

子依赖

比如上图,E 依赖 C、D,C、D 又依赖 B,B 又依赖 A.....

  

两层依赖的栗子

第一层依赖

from typing import Optional

# 1、第一层依赖
def query_extractor(q: Optional[str] = None):
    return q

就是个普通函数,接收一个 q 参数,类型 str,直接返回 q

 

第二层依赖

from fastapi import Cookie, Depends, FastAPI
from typing import Optional

# 1、第一层依赖
def query_extractor(q: Optional[str] = None):
    return q


# 2、第二层依赖
def query_or_cookie_extractor(
        # 声明依赖项
        q: str = Depends(query_extractor),
        # 另外一个参数,接收 Cookie
        last_query: Optional[str] = Cookie(None)
):
    if not q:
        return last_query
    return q

 

路径操作函数声明依赖项

#!usr/bin/env python
# -*- coding:utf-8 _*-
"""
# author: 小菠萝测试笔记
# blog:  https://www.cnblogs.com/poloyy/
# time: 2021/9/25 10:26 上午
# file: 27_sub_depend.py
"""

from typing import Optional

import uvicorn
from fastapi import Cookie, Depends, FastAPI

app = FastAPI()


# 1、第一层依赖
def query_extractor(q: Optional[str] = None):
    return q


# 2、第二层依赖
def query_or_cookie_extractor(
        # 声明依赖项
        qq: str = Depends(query_extractor),
        # 另外一个参数,接收 Cookie
        last_query: Optional[str] = Cookie(None)
):
    if not qq:
        return last_query
    return qq


@app.get("/items/")
async def read_query(
        # 3、声明依赖项
        query_or_default: str = Depends(query_or_cookie_extractor)
):
    return {"q_or_cookie": query_or_default}


if __name__ == "__main__":
    uvicorn.run(app="27_sub_depend:app", host="127.0.0.1", port=8080, reload=True, debug=True)

 

FastAPI 的执行顺序图

先执行第一层依赖,然后第二层,最后才会执行路径操作函数

 

查看 Swagger API 文档

 

正确传参的请求结果

 

user_cache 的作用

async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False)):
    return {"fresh_value": fresh_value}

 

多个路径操作函数声明同一个依赖项

 

标签:extractor,依赖,return,FastAPI,31,dependencies,str,query,Optional
来源: https://www.cnblogs.com/poloyy/p/15332992.html