Параметры запроса переменных 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


person Werner    schedule 09.06.2020    source источник
comment
Попробуйте @app.get("/files/{file_path:path}"), fastapi.tiangolo.com/tutorial/path-params   -  person Alexander Lubyagin    schedule 02.10.2020


Ответы (2)


В документах говорится об прямом использовании запроса., что привело меня к этому:

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
person Werner    schedule 09.06.2020
comment
как насчет того, чтобы получить каждый из параметров? каким-либо способом получить все параметры из строки params? - person uberrebu; 17.06.2021

Как указано в документации 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)}

выход

введите описание изображения здесь

введите описание изображения здесь

person qaiser    schedule 24.05.2021
comment
Ах да, это тоже работает, но не учитывает количество параметров, которые могли быть переданы в - person Werner; 24.05.2021
comment
как и этот ответ ... есть отличный вариант использования для этого ответа ... когда мне нужно сделать что-то еще с параметрами запроса - person uberrebu; 17.06.2021