РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
157 of 307 menu

Статус HTTP_422_UNPROCESSABLE_ENTITY

Статус HTTP_422_UNPROCESSABLE_ENTITY - это константа из модуля fastapi.status, равная числу 422. Она означает, что сервер принял запрос, понял его тип, но не может обработать содержащиеся в нём данные. В FastAPI этот статус возвращается автоматически, когда входящие данные не проходят валидацию Pydantic-модели: отсутствует обязательное поле, неверный тип, нарушено ограничение и т.п. Константу можно использовать в параметре status_code декораторов маршрутов и в объекте HTTPException.

Синтаксис

from fastapi import status status.HTTP_422_UNPROCESSABLE_ENTITY

Пример

Давайте посмотрим, как FastAPI автоматически возвращает статус 422, когда тело запроса не проходит валидацию модели:

from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): name: str age: int @app.post('/user/') def create_user(user: User): return {'name': user.name, 'age': user.age}

Если отправить POST-запрос с телом, где поле age является строкой вместо числа, FastAPI вернёт статус 422 и JSON с описанием ошибки:

{ "detail": [ { "type": "int_parsing", "loc": ["body", "age"], "msg": "Input should be a valid integer, unable to parse string as an integer", "input": "abcde" } ] }

Пример

Давайте явно вернём статус HTTP_422_UNPROCESSABLE_ENTITY через исключение HTTPException, когда данные формально прошли валидацию, но не устраивают бизнес-логику:

from fastapi import FastAPI, HTTPException, status from pydantic import BaseModel app = FastAPI() class Article(BaseModel): title: str content: str @app.post('/article/') def create_article(article: Article): if len(article.title) < 3: raise HTTPException( status_code=status.HTTP_422_UNPROCESSABLE_ENTITY, detail='title is too short' ) return {'title': article.title, 'content': article.content}

Результат выполнения кода для тела запроса с title равным 'ab':

{"detail": "title is too short"}

Пример

Давайте укажем статус HTTP_422_UNPROCESSABLE_ENTITY в параметре status_code декоратора маршрута:

<+python+> from fastapi import FastAPI, status from pydantic import BaseModel app = FastAPI() class User(BaseModel): name: str @app.post('/user/', status_code=status.HTTP_422_UNPROCESSABLE_ENTITY) def create_user(user: User): return {'name': user.name} <-python+>

Такой подход используется редко, поскольку статус 422 обычно означает именно ошибку валидации, а не успешную обработку. Тем не менее, при необходимости его можно задать вручную.

Смотрите также

  • статус HTTP_400_BAD_REQUEST,
    который означает некорректный запрос клиента
  • статус HTTP_409_CONFLICT,
    который означает конфликт с текущим состоянием ресурса
  • статус HTTP_429_TOO_MANY_REQUESTS,
    который означает превышение лимита запросов
  • модуль status,
    который содержит все константы HTTP-статусов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить