You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.3 KiB

Модели Query-Параметров

Если у вас есть группа связанных query-параметров, то вы можете объединить их в одну Pydantic-модель.

Это позволит вам переиспользовать модель в разных местах, устанавливать валидаторы и метаданные, в том числе для сразу всех параметров, в одном месте. 😎

/// note | Заметка

Этот функционал доступен с версии 0.115.0. 🤓

///

Pydantic-Модель для Query-Параметров

Объявите нужные query-параметры в Pydantic-модели, а после аннотируйте параметр как Query:

{* ../../docs_src/query_param_models/tutorial001_an_py310.py hl[9:13,17] *}

FastAPI извлечёт данные соответствующие каждому полю модели из query-параметров запроса и выдаст вам объявленную Pydantic-модель заполненную ими.

Проверьте Сгенерированную Документацию

Вы можете посмотреть query-параметры в графическом интерфейсе сгенерированной документации по пути /docs:

Запретить Дополнительные Query-Параметры

В некоторых случаях (не особо часто встречающихся) вам может понадобиться ограничить query-параметры, которые вы хотите получить.

Вы можете сконфигурировать Pydantic-модель так, чтобы запретить (forbid) все дополнительные (extra) поля.

{* ../../docs_src/query_param_models/tutorial002_an_py310.py hl[10] *}

Если клиент попробует отправить дополнительные данные в query-параметрах, то в ответ он получит ошибку.

Например, если клиент попытается отправить query-параметр tool с значением plumbus, в виде:

https://example.com/items/?limit=10&tool=plumbus

То в ответ он получит ошибку, сообщающую ему, что query-параметр tool не разрешен:

{
    "detail": [
        {
            "type": "extra_forbidden",
            "loc": ["query", "tool"],
            "msg": "Extra inputs are not permitted",
            "input": "plumbus"
        }
    ]
}

Заключение

Вы можете использовать Pydantic-модели для объявления query-параметров в FastAPI. 😎

/// tip | Совет

Спойлер: вы также можете использовать Pydantic-модели для группировки кук (cookies) и заголовков (headers), но об этом вы прочитаете позже. 🤫

///