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

  • 相关阅读:
    c# 异步和同步问题(转载)
    用Python作GIS之四:Tkinter基本界面的搭建
    Linux必知必会--vmstat
    Linux必知必会--awk
    Linux必知必会--sed
    Linux必知必会--grep
    Linux必知必会--curl
    康威定律
    移动端抓包合集
    MySQL重置自增id
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/14950735.html
Copyright © 2011-2022 走看看