Статус HTTP_303_SEE_OTHER
Статус HTTP_303_SEE_OTHER применяется для перенаправления клиента
на другой URL после обработки запроса. В отличие от статуса HTTP_302_FOUND,
клиент обязан выполнить переход по новому адресу именно методом GET,
даже если исходный запрос был POST, PUT или DELETE.
Статус часто используется в паттерне Post/Redirect/Get, чтобы избежать
повторной отправки формы при обновлении страницы.
Константа импортируется из модуля fastapi.status
и передаётся в параметр status_code декоратора маршрута
или в объект Response.
Синтаксис
from fastapi import status
status.HTTP_303_SEE_OTHER
Пример
Давайте вернём статус HTTP_303_SEE_OTHER и заголовок Location
с адресом перенаправления:
from fastapi import FastAPI, Response, status
app = FastAPI()
@app.post('/submit')
def submit(res: Response):
res.status_code = status.HTTP_303_SEE_OTHER
res.headers['Location'] = '/result'
return {'text': 'created'}
@app.get('/result')
def result():
return {'text': 'result page'}
Результат выполнения POST-запроса к адресу /submit:
{"text": "created"}
При этом ответ содержит код 303 и заголовок
Location: /result, по которому клиент выполнит GET-запрос.
Пример
Давайте зададим статус через параметр status_code декоратора
и класс RedirectResponse:
from fastapi import FastAPI, status
from fastapi.responses import RedirectResponse
app = FastAPI()
@app.post('/user', status_code=status.HTTP_303_SEE_OTHER)
def create_user():
return RedirectResponse(url='/user/abcde',
status_code=status.HTTP_303_SEE_OTHER)
@app.get('/user/{name}')
def user(name: str):
return {'name': name}
Результат выполнения кода для адреса /user/abcde после перехода:
{"name": "abcde"}
Смотрите также
-
статус
HTTP_302_FOUND,
который выполняет временное перенаправление без смены метода -
статус
HTTP_301_MOVED_PERMANENTLY,
который указывает на постоянное перенаправление ресурса -
статус
HTTP_307_TEMPORARY_REDIRECT,
который сохраняет исходный HTTP-метод при перенаправлении -
модуль
status,
который содержит все константы HTTP-статусов