FastAPI 变量查询参数

FastAPI variable query parameters

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

我需要携带URL个参数,例如

http://localhost:80/data/?param1=val1¶m2=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

在他们谈论的文档中 using the Request directly, which then lead me to this:

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

如 FastAPI 文档中所述 https://fastapi.tiangolo.com/tutorial/query-params-str-validations/

 @app.get("/")
 def read_root(param1: Optional[str] = None, param2: Optional[str] = None):
     url = f'http://some.other.api/{param1}/{param2}'
     return {'url': str(url)}

输出

如果在启动 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", **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 documentation 查看更多关于动态模型创建的信息。