zoukankan      html  css  js  c++  java
  • fastapi小技巧

    1、定制文档生成:

        参见 fastapi/applycations.py 中的setup.  /docs 把所有的路径routes 都包含进去了。参考实现根据tag 实现文档生成。

        要先生成docs 需要的openapi_url。(其中get_openapi 是fastapi.openapi.utils 内部的函数)

    @app.get("/api/docs/{tag}/openapi.json",include_in_schema=False)
    async def docs_tag(tag:str) -> JSONResponse:
        openapi_schema = get_openapi(
                    title=app.title,
                    version=app.version,
                    openapi_version=app.openapi_version,
                    description=app.description,
                    routes=[router for router in app.routes if  tag in getattr(router,"tags",[]) ],
                    tags=app.openapi_tags,
                    servers=app.servers,
                )
        return JSONResponse(openapi_schema)

        再定义tag 的前端页面部分:

    @app.get("/docs/{tag}",include_in_schema=False)
    async def get_documentation_tag_api(tag:str):
        return get_swagger_ui_html(openapi_url=f"/api/docs/{tag}/openapi.json", title="docs")

     2、"response_model" para cannot be a local model

        这是我提交了一个fastapi 的一个bug。详情见:https://github.com/tiangolo/fastapi/issues/4103

    Description

    【error】"response_model" para cannot be a local model

    【suggest】: rewrite pydanticschema.py L303 function get_model_name_map

    in L324 insert:

    long_model_name =get_long_model_name(model)
    if "<locals>" in long_model_name: # 这个不是冲突,只是用户动态生成的mata class
        # 生成随机串,直到不冲突
        while True:
            random_str=str(random.randint(1111111,9999999))
            if f"{model_name}_{random_str}" not in name_model_map:
                name_model_map[f"{model_name}_{random_str}"] = model
                break
        continue
    

    donot forget add dependents

    版本如下:

    fastapi==0.63.0    Python== 3.7.6  pydantic==1.8.1

  • 相关阅读:
    赛前一个月
    Barricade---hdu5889(最短路+网络流)
    Tea---hdu5881(规律)
    The Best Path---hdu5883(欧拉路径)
    Cure---hdu5879(打表+找规律)
    Python列表操作
    Zabbix在Docker中的应用和监控
    flannel网络设置
    Volume
    Service资源清单
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/14950735.html
Copyright © 2011-2022 走看看