Статус HTTP_403_FORBIDDEN
Константа HTTP_403_FORBIDDEN применяется для указания кода ответа
403 Forbidden. Этот статус означает, что клиент
аутентифицирован, но не имеет прав на доступ к ресурсу.
В отличие от 401 Unauthorized, повторная аутентификация
не поможет. Константа импортируется из модуля fastapi.status
и передаётся в параметр status_code декоратора маршрута
или в исключение HTTPException.
Синтаксис
from fastapi import status
status.HTTP_403_FORBIDDEN
Пример
Давайте вернём статус 403 прямо из обработчика маршрута:
from fastapi import FastAPI, status
app = FastAPI()
@app.get('/admin/', status_code=status.HTTP_403_FORBIDDEN)
def admin():
return {'detail': 'Access denied'}
Результат выполнения кода:
{"detail": "Access denied"}
Пример
Чаще статус 403 бросают через исключение HTTPException,
когда у пользователя нет нужной роли:
from fastapi import FastAPI, HTTPException, status
app = FastAPI()
@app.get('/user/{name}')
def user(name: str, role: str = 'guest'):
if role != 'admin':
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='Not enough rights'
)
return {'name': name, 'role': role}
Результат выполнения кода для адреса /user/abcde:
{"detail": "Not enough rights"}
Пример
Давайте вынесем проверку прав в отдельную зависимость
и вернём статус 403 через неё:
from fastapi import FastAPI, Depends, HTTPException, status
app = FastAPI()
def check_admin(token: str = ''):
if token != 'secret':
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail='Forbidden'
)
@app.get('/article/', dependencies=[Depends(check_admin)])
def article():
return {'text': 'hello'}
Результат выполнения кода для адреса /article/?token=secret:
{"text": "hello"}
Смотрите также
-
статус
HTTP_401_UNAUTHORIZED,
который требует аутентификации клиента -
статус
HTTP_404_NOT_FOUND,
который сообщает об отсутствии ресурса -
статус
HTTP_200_OK,
который возвращается при успешном запросе -
модуль
status,
который содержит все константы HTTP-статусов