FastAPI 变量查询参数

新手上路,请多包涵

我正在编写一个接受请求的快速 API 服务器,检查用户是否获得授权,如果成功则将他们重定向到另一个 URL。

我需要保留 URL 参数,例如 http://localhost:80/data/?param1=val1&param2=val2 应该重定向到 http://some.other.api/?param1=val1&param2=val2 ,从而保留之前分配的参数。

参数不受我控制,随时可能改变。

我怎样才能做到这一点?

代码:

 from fastapi import FastAPI
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data():
    params = '' # I need this value
    url = f'http://some.other.api/{params}'
    response = RedirectResponse(url=url)
    return response

原文由 Werner Raath 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 405
2 个回答

在文档中,他们讨论 了直接使用 Request ,这让我想到了 这一点

 from fastapi import FastAPI, Request
from starlette.responses import RedirectResponse

app = FastAPI()

@app.get("/data/")
async def api_data(request: Request):
    params = request.query_params
    url = f'http://some.other.api/?{params}'
    response = RedirectResponse(url=url)
    return response

原文由 Werner Raath 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果在启动 API 时查询参数已知,但您仍希望动态设置它们:

 from fastapi import FastAPI, Depends
from pydantic import create_model

app = FastAPI()

# Put your query arguments in this dict
query_params = {"name": (str, "me")}

query_model = create_model("Query", **query_params) # This is subclass of pydantic BaseModel

# Create a route
@app.get("/items")
async def get_items(params: query_model = Depends()):
    params_as_dict = params.dict()
    ...

这样做的好处是您可以在自动文档中看到参数:

招摇的用户界面

但是您仍然可以动态定义它们(在启动 API 时)。

注意: 如果您的模型将字典、列表或其他 BaseModel 作为字段类型,则会弹出请求正文。 GET 不应包含正文内容,因此您可能希望避免使用这些类型。

Pydantic 文档 中查看有关动态模型创建的更多信息。

原文由 miksus 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题