Атрибут headers класса HTTPException
Атрибут headers принадлежит классу HTTPException
и хранит словарь HTTP-заголовков, которые будут добавлены
к ответу с ошибкой. Значение передаётся третьим параметром
при создании исключения и по умолчанию равно None.
Если заголовки не нужны, параметр можно опустить.
Атрибут особенно полезен, когда требуется сообщить клиенту
дополнительную информацию, например заголовок WWW-Authenticate
при ошибке авторизации или Retry-After при ограничении запросов.
Синтаксис
HTTPException(status_code, detail, headers)
Атрибут доступен у экземпляра исключения:
exc.headers
Пример
Давайте поднимем исключение с заголовком X-Error:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/user')
def get_user():
raise HTTPException(
status_code=404,
detail='user not found',
headers={'X-Error': 'UserNotFound'}
)
Результат ответа для адреса /user:
{"detail": "user not found"}
При этом в заголовках ответа появится X-Error: UserNotFound.
Пример
Давайте используем заголовок WWW-Authenticate
при ошибке авторизации:
from fastapi import FastAPI, HTTPException, Header
app = FastAPI()
@app.get('/article')
def get_article(token: str = Header(None)):
if token != 'abcde':
raise HTTPException(
status_code=401,
detail='invalid token',
headers={'WWW-Authenticate': 'Bearer'}
)
return {'article': 'hello'}
Результат ответа при неверном токене:
{"detail": "invalid token"}
Клиент получит заголовок WWW-Authenticate: Bearer
вместе с кодом состояния 401.
Пример
Давайте прочитаем атрибут headers у созданного исключения:
from fastapi import FastAPI, HTTPException
app = FastAPI()
@app.get('/')
def index():
exc = HTTPException(
status_code=429,
detail='too many requests',
headers={'Retry-After': '60'}
)
return {'headers': exc.headers}
Результат выполнения кода:
{"headers": {"Retry-After": "60"}}
Смотрите также
-
класс
HTTPException,
который представляет HTTP-ошибку в FastAPI -
атрибут
status_code,
который задаёт код состояния ответа -
атрибут
detail,
который содержит описание ошибки -
класс
WebSocketException,
который представляет ошибку WebSocket-соединения