我正在编写一个 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)
正如 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)
输出
| 归档时间: |
|
| 查看次数: |
7184 次 |
| 最近记录: |