gpt4 book ai didi

python - FastAPI:从 View 名称(路由名称)检索URL

转载 作者:行者123 更新时间:2023-12-03 15:23:52 26 4
gpt4 key购买 nike

假设我有以下观点,

from fastapi import FastAPI

app = FastAPI()


@app.get('/hello/')
def hello_world():
return {"msg": "Hello World"}


@app.get('/hello/{number}/')
def hello_world_number(number: int):
return {"msg": "Hello World Number", "number": number}
我一直在Flask和Django中使用这些功能
  • Flask: url_for(...)
  • Django: reverse(...)

  • 那么,如何以类似的方式获取/构建 hello_worldhello_world_number的URL?

    最佳答案

    我们有 Router.url_path_for(...) 方法,它位于starlette包中
    方法1:使用FastAPI实例
    当您能够在当前上下文中访问FastAPI实例时,此方法很有用。 (感谢@Yagizcan Degirmenci)

    from fastapi import FastAPI

    app = FastAPI()


    @app.get('/hello/')
    def hello_world():
    return {"msg": "Hello World"}


    @app.get('/hello/{number}/')
    def hello_world_number(number: int):
    return {"msg": "Hello World Number", "number": number}


    print(app.url_path_for('hello_world'))
    print(app.url_path_for('hello_world_number', **{"number": 1}))
    print(app.url_path_for('hello_world_number', **{"number": 2}))

    # Results

    /hello/
    /hello/1/
    /hello/2/
    退税
  • 如果我们使用 APIRouter ,则 router.url_path_for('hello_world') 可能不起作用,因为router不是FastAPI类的实例。也就是说,我们必须具有FastAPI实例才能解析URL

  • 方法2: Request实例
    通常,您可以在 View 中访问 Request实例(传入请求)时,此方法很有用。
    from fastapi import FastAPI, Request

    app = FastAPI()


    @app.get('/hello/')
    def hello_world():
    return {"msg": "Hello World"}


    @app.get('/hello/{number}/')
    def hello_world_number(number: int):
    return {"msg": "Hello World Number", "number": number}


    @app.get('/')
    def named_url_reveres(request: Request):
    return {
    "URL for 'hello_world'": request.url_for("hello_world"),
    "URL for 'hello_world_number' with number '1'": request.url_for("hello_world_number", **{"number": 1}),
    "URL for 'hello_world_number' with number '2''": request.url_for("hello_world_number", **{"number": 2})
    }

    # Result Response

    {
    "URL for 'hello_world'": "http://0.0.0.0:6022/hello/",
    "URL for 'hello_world_number' with number '1'": "http://0.0.0.0:6022/hello/1/",
    "URL for 'hello_world_number' with number '2''": "http://0.0.0.0:6022/hello/2/"
    }
    退税
  • 我们必须在每个(或必需的) View 中包括request参数来解析URL,这可能会使开发人员感到难看。
  • 关于python - FastAPI:从 View 名称(路由名称)检索URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63682956/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com