FastAPI 变量查询参数
FastAPI variable query parameters
我正在编写一个接受请求的快速 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
在他们谈论的文档中 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 查看更多关于动态模型创建的信息。
我正在编写一个接受请求的快速 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
在他们谈论的文档中 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 查看更多关于动态模型创建的信息。