FastAPI 变量查询参数

Wer*_*ner 7 python fastapi

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

我需要携带 URL 参数,例如

http://localhost:80/data/?param1=val1¶m2=val2 应该重定向到 http://some.other.api/?param1=val1¶m2=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

Run Code Online (Sandbox Code Playgroud)

mik*_*sus 13

如果启动 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()
    ...
Run Code Online (Sandbox Code Playgroud)

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

招摇的用户界面

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

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

从Pydantic 文档中了解有关动态模型创建的更多信息。


Wer*_*ner 12

在他们谈论的文档直接使用请求,然后使我这个

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

app = FastAPI()

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


qai*_*ser 6

正如 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)}
Run Code Online (Sandbox Code Playgroud)

输出

在此输入图像描述

在此输入图像描述

  • 啊,是的,这也有效,但没有考虑可能已传入的任何数量的参数 (3认同)