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.

5.0 KiB

Данные формы

Когда вам нужно получить поля формы вместо JSON, вы можете использовать Form.

!!! info "Дополнительная информация" Чтобы использовать формы, сначала установите python-multipart.

Например, выполните команду `pip install python-multipart`.

Импорт Form

Импортируйте Form из fastapi:

=== "Python 3.9+"

```Python hl_lines="3"
{!> ../../../docs_src/request_forms/tutorial001_an_py39.py!}
```

=== "Python 3.6+"

```Python hl_lines="1"
{!> ../../../docs_src/request_forms/tutorial001_an.py!}
```

=== "Python 3.6+ без Annotated"

!!! tip "Подсказка"
    Рекомендуется использовать 'Annotated' версию, если это возможно.

```Python hl_lines="1"
{!> ../../../docs_src/request_forms/tutorial001.py!}
```

Определение параметров Form

Создайте параметры формы так же, как это делается для Body или Query:

=== "Python 3.9+"

```Python hl_lines="9"
{!> ../../../docs_src/request_forms/tutorial001_an_py39.py!}
```

=== "Python 3.6+"

```Python hl_lines="8"
{!> ../../../docs_src/request_forms/tutorial001_an.py!}
```

=== "Python 3.6+ без Annotated"

!!! tip "Подсказка"
    Рекомендуется использовать 'Annotated' версию, если это возможно.

```Python hl_lines="7"
{!> ../../../docs_src/request_forms/tutorial001.py!}
```

Например, в одном из способов использования спецификации OAuth2 (называемом "потоком пароля") требуется отправить username и password в виде полей формы.

Данный способ требует отправку данных для авторизации посредством формы (а не JSON) и обязательного наличия в форме строго именованных полей username и password.

Вы можете настроить Form точно так же, как настраиваете и Body ( Query, Path, Cookie), включая валидации, примеры, псевдонимы (например, user-name вместо username) и т.д.

!!! info "Дополнительная информация" Form - это класс, который наследуется непосредственно от Body.

!!! tip "Подсказка" Вам необходимо явно указывать параметр Form при объявлении каждого поля, иначе поля будут интерпретироваться как параметры запроса или параметры тела (JSON).

О "полях формы"

Обычно способ, которым HTML-формы (<form></form>) отправляют данные на сервер, использует "специальное" кодирование для этих данных, отличное от JSON.

FastAPI гарантирует правильное чтение этих данных из соответствующего места, а не из JSON.

!!! note "Технические детали" Данные из форм обычно кодируются с использованием "типа медиа" application/x-www-form-urlencoded.

Но когда форма содержит файлы, она кодируется как `multipart/form-data`. Вы узнаете о работе с файлами в следующей главе.

Если вы хотите узнать больше про кодировки и поля формы, ознакомьтесь с <a href="https://developer.mozilla.org/ru/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank">документацией <abbr title="Mozilla Developer Network">MDN</abbr> для `POST` на веб-сайте</a>.

!!! warning "Предупреждение" Вы можете объявлять несколько параметров Form в операции пути, но вы не можете одновременно с этим объявлять поля Body, которые вы ожидаете получить в виде JSON, так как запрос будет иметь тело, закодированное с использованием application/x-www-form-urlencoded, а не application/json.

Это не ограничение **FastAPI**, это часть протокола HTTP.

Резюме

Используйте Form для объявления входных параметров данных формы.