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

  • 相关阅读:
    Fix Installing .NET Framework 3.5 failed Error Code 0x800F0954 on Windows 10
    RHEL8安装五笔输入法
    Enable EPEL and Local Repository on RHEL8
    Why is Yum Replaced by DNF?
    检查Linux服务器是否被攻击的常用命令及方法
    IDEA 主题
    IDEA 如何显示一个类中所有的方法
    Appium 安装以及安装过程中遇到的问题
    Maven 如何发布 jar 包到 Nexus 私库
    java泛型的基本使用
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/14950735.html
Copyright © 2011-2022 走看看