Параметры тела: Внешность | Онлайн калькулятор

Содержание

Как измеряются параметры тела: видео инструкция

Гардероб

Содержание статьи:

  • Как измерить рост
  • Как измерить объем груди
  • Как измерить талию
  • Как измерить обхват бедер
  • Как измерить длину рукава

Как измерить параметры тела

Фото
Shutterstock

Как измерить рост

Для того чтобы вещь удачно села по фигуре и вам не пришлось ее укорачивать или, напротив, чтобы одежда не оказалась слишком короткой, необходимо учитывать свой рост. Если вы хотите измерить его дома, снимите обувь, встаньте спиной к ровной поверхности и сделайте карандашом на стене или двери отметку. При этом карандаш должен касаться вашей макушки и быть параллелен полу. После этого измерьте получившееся расстояние при помощи сантиметровой ленты или в идеале строительного метра, который не будет прогибаться.

Желательно измерять рост в первой половине дня. К вечеру он может уменьшиться на два-три сантиметра за счет нагрузки на позвоночные диски

Как измерить объем груди

Если вы подбираете себе футболку, блузу, куртку или платье, вам непременно понадобится знать ваш объем груди. Для того чтобы правильно определить этот параметр, возьмите сантиметровую ленту, оберните ее вокруг грудной клетки, проводя через наиболее выступающие ее точки, и выдохните. Следите за тем, чтобы лента при этом была параллельна полу, не сдавливала грудь, но и не была слишком свободна. Полученное значение и будет объемом груди.

Пригодиться может и объем под грудью. Чтобы узнать эту величину, лента должна проходить сразу же под молочными железами и быть параллельна полу. Измерения также проводятся на выдохе.

Как измерить талию

Неважно, какого типа у вас фигура, находится ли талия ближе к бюсту или, напротив, она низкая и приближается к линии бедер. Под талией подразумевается самое узкое место, и именно его и следует измерять. При этом не втягивайте и не выпячивайте живот, пусть он будет расслаблен. Сантиметровая лента должна плотно прилегать к телу, но не передавливать талию.

Как измерить обхват бедер

Для того чтобы измерить обхват бедер, ленту следует обернуть вокруг тела по наиболее выдающимся точкам ягодиц и при этом следить, чтобы сантиметровая лента оставалась параллельной полу. Во время измерения ноги должны быть сведены вместе – другая поза повлияет на результат.

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

Как измерить длину рукава

Длина рукава также является немаловажным фактором для удачного выбора одежды. Измерять ее лучше с помощником. Попросите кого-нибудь приложить сантиметровую ленту к центру вашей шеи в задней части. Слегка согните руку в локте. Лента должна пройти вдоль плеча и предплечья к запястью.

Читайте далее: как завязать тонкий галстук

Надежда Маркевич

Сегодня читают

«Слишком нескромно»: Бузова натянула купальник так высоко, что обнажила больше, чем нужно

«Ноги от ушей»: Хейли Бибер в экстра-мини прошлась по улице — глаз не отвести

Как на самом деле выглядят квартиры в Нью-Йорке: 20 реальных фото, которые ужасают

Виктория Боня показала лицо после пластики — поклонники ошеломлены

Анастасия Волочкова надела самую опасную домашнюю майку — это хочется забыть

Параметры тела. Какой тип телосложения?

Параметры тела. Какой …

14 ответов

Последний — Перейти

#1

#2

Гость

Шея длинная или короткая? Форма головы какая?

#3

#4

#5

15 апреля 2019, 21:19

#6

#7

#8

#9

Гость

Песочные часы тип фигуры

#10

Гость

Песочные часы это когда грудь и бедра одного обхвата а талия узкая и отличается от бедер и груди минимум на 30 см. А у автора талия по сравнению с грудью не выраженная. Но бедра ничего вроде. Ближе к груше.

18 апреля 2019, 14:38

#11

Гость

Песочные часы это когда грудь и бедра одного обхвата а талия узкая и отличается от бедер и груди минимум на 30 см. А у автора талия по сравнению с грудью не выраженная. Но бедра ничего вроде. Ближе к груше.

#12

Гость

Песочные часы это когда грудь и бедра одного обхвата а талия узкая и отличается от бедер и груди минимум на 30 см. А у автора талия по сравнению с грудью не выраженная. Но бедра ничего вроде. Ближе к груше.

#13

Гость

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

У груши при таком объёме бедёр грудь будет 82-85 см Они же безгрудые и жопастые

#14

гость

сколько будет 89-63?

Новые темы за сутки:

  • Пирсинг сосков на не стандартной груди

    4 ответа

  • Полюбить свою фигуру и не менять себя?

    14 ответов

  • Есть те, кто не пользуется парфюмом?

    9 ответов

  • Пирсинг. Кто делал?

    4 ответа

  • Как сделать фигуру женственнее?

    6 ответов

  • Смешно с таких парней

    5 ответов

  • Бедра 97 при росте 165

    14 ответов

  • Кожу в порядок

    3 ответа

  • Сухая кожа рук

    9 ответов

  • Девочки,кто исправил совсем плоские ягодицы?

    6 ответов

Популярные темы за сутки:

  • Вам нравится когда у человека татуировка на теле?

    22 ответа

  • Бедра 97 при росте 165

    15 ответов

  • Полюбить свою фигуру и не менять себя?

    14 ответов

  • Есть те, кто не пользуется парфюмом?

    9 ответов

  • Сухая кожа рук

    9 ответов

  • Мужчина с каким ростом имеет меньший успех у женщин?

    8 ответов

  • Как сделать фигуру женственнее?

    6 ответов

  • Что думаете на тему пирсинг пупка?

    6 ответов

  • Девочки,кто исправил совсем плоские ягодицы?

    6 ответов

  • Закономерность размеров

    6 ответов

Следующая тема

  • что делать с такой ассиметрией?

    5 ответов

Предыдущая тема

  • Удаление волос на ногах

    11 ответов

Body — Несколько параметров — FastAPI

Теперь, когда мы увидели, как использовать Path и Query , давайте рассмотрим более продвинутое использование объявлений тела запроса.

Микс

Путь , Запрос и параметры тела

Во-первых, конечно, вы можете свободно смешивать Path , Query и объявления параметров тела запроса, и FastAPI будет знать, что делать.

И вы также можете объявить параметры тела необязательными, установив по умолчанию значение Нет

:

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    вопрос: ул | Нет = Нет,
    пункт: Пункт | Нет = Нет,
):
    результаты = {"item_id": item_id}
    если д:
        results. update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 
 от ввода импортного союза
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi импорта FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: int = Path(title="Идентификатор элемента, который необходимо получить", ge=0, le=1000),
    вопрос: ул | Нет = Нет,
    пункт: Пункт | Нет = Нет,
):
    результаты = {"item_id": item_id}
    если д:
        results.
update({"q": q}) если элемент: results.update({"item": item}) возвращать результаты

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: int = Path(title="Идентификатор элемента, который необходимо получить", ge=0, le=1000),
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 

Примечание

Обратите внимание, что в этом случае элемент , который будет взят из тела, является необязательным. Поскольку он имеет значение по умолчанию None .

Несколько параметров тела

В предыдущем примере операции пути ожидали бы тело JSON с атрибутами Item , например:

 {
    "имя": "Фу",
    "description": "Претендент",
    "цена": 42,0,
    "налог": 3,2
}
 

Но вы также можете объявить несколько параметров тела, например. элемент и пользователь :

Python 3.10+Python 3.6+

 из fastapi импортировать FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, user: User):
    результаты = {"item_id": item_id, "item": элемент, "user": пользователь}
    возвращать результаты
 
 от ввода импортного союза
из fastapi импортировать FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, user: User):
    результаты = {"item_id": item_id, "item": элемент, "user": пользователь}
    возвращать результаты
 

В этом случае FastAPI заметит, что в функции есть более одного параметра тела (два параметра, которые являются моделями Pydantic).

Таким образом, он будет использовать имена параметров в качестве ключей (имен полей) в теле и ожидать тело, подобное:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    },
    "пользователь": {
        "имя пользователя": "дэйв",
        "full_name": "Дэйв Грол"
    }
}
 

Примечание

Обратите внимание, что хотя элемент был объявлен так же, как и раньше, теперь ожидается, что он будет находиться внутри тела с ключом элемент .

FastAPI выполнит автоматическое преобразование из запроса, чтобы параметр элемент получил свое конкретное содержимое и то же самое для пользователя .

Он выполнит проверку составных данных и задокументирует их так же, как для схемы OpenAPI и автоматических документов.

Особые значения в теле

Так же, как Query и Path для определения дополнительных данных для параметров запроса и пути, FastAPI предоставляет эквивалент Body .

Например, расширяя предыдущую модель, вы можете решить, что хотите иметь еще один ключ важность в том же теле, кроме элемента и пользователя .

Если вы объявите его как есть, потому что это единственное число, FastAPI будет считать, что это параметр запроса.

Но вы можете указать FastAPI рассматривать его как еще один ключ тела, используя Body :

Python 3. 10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app. put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, пользователь: User, важность: int = Body()):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app. put("/items/{item_id}")
async def update_item (item_id: int, item: Item, пользователь: User, важность: int = Body()):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

В этом случае FastAPI будет ожидать тело вида:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    },
    "пользователь": {
        "имя пользователя": "дэйв",
        "full_name": "Дэйв Грол"
    },
    "важность": 5
}
 

Опять же, он будет преобразовывать типы данных, проверять, документировать и т. д.

Несколько параметров тела и запрос

Конечно, вы также можете объявить дополнительные параметры запроса, когда вам нужно, в дополнение к любым параметрам тела.

Поскольку по умолчанию единичные значения интерпретируются как параметры запроса, вам не нужно явно добавлять Query , вы можете просто сделать:

 q: Union[str, None] = Нет
 

Или в Python 3. 10 и выше:

 кв: ул | Нет = Нет
 

Например:

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    вопрос: ул | Нет = Нет,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app. put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: int = Body (gt = 0),
    вопрос: ул | Нет = Нет,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results. update({"q": q})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: int = Body (gt = 0),
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 

Встроить одиночный параметр тела

Допустим, у вас есть только один параметр тела item из модели Pydantic Item .

По умолчанию FastAPI ожидает свое тело напрямую.

Но если вы хотите, чтобы он ожидал JSON с ключом item и внутри него содержимым модели, как это происходит при объявлении дополнительных параметров тела, вы можете использовать специальный параметр Body embed :

9Элемент 0028: Элемент = Тело (embed=True)

как в:

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item = Body (embed = True)):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

Наконечник

Предпочтительнее использовать Аннотированная версия , если возможно.

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item = Body (embed = True)):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

В данном случае FastAPI будет ожидать кузов типа:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    }
}
 

вместо:

 {
    "имя": "Фу",
    "description": "Претендент",
    "цена": 42,0,
    "налог": 3,2
}
 

Резюме

Вы можете добавить несколько параметров тела в свою функцию операции пути , даже если запрос может иметь только одно тело.

Но FastAPI справится с этим, предоставит вам правильные данные в вашей функции, а также подтвердит и задокументирует правильную схему в операции пути .

Вы также можете объявить единичные значения, которые будут приниматься как часть тела.

И вы можете дать указание FastAPI встроить тело в ключ, даже если объявлен только один параметр.

Body — Несколько параметров — FastAPI

Теперь, когда мы увидели, как использовать Path и Query , давайте посмотрим на более продвинутое использование объявлений тела запроса.

Микс

Путь , Запрос и параметры тела

Во-первых, конечно, вы можете свободно смешивать Path , Query и объявления параметров тела запроса, и FastAPI будет знать, что делать.

И вы также можете объявить параметры тела необязательными, установив значение по умолчанию None :

Python 3. 10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 от ввода импорта с аннотациями
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    вопрос: ул | Нет = Нет,
    пункт: Пункт | Нет = Нет,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app. put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 
 от ввода импортного союза
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: Annotated[int, Path(title="ID элемента, который необходимо получить", ge=0, le=1000)],
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results. update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi импорта FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: int = Path(title="Идентификатор элемента, который необходимо получить", ge=0, le=1000),
    вопрос: ул | Нет = Нет,
    пункт: Пункт | Нет = Нет,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi импортировать FastAPI, путь
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: int = Path(title="Идентификатор элемента, который необходимо получить", ge=0, le=1000),
    q: Union[str, None] = None,
    элемент: Union[Item, None] = None,
):
    результаты = {"item_id": item_id}
    если д:
        results.update({"q": q})
    если элемент:
        results.update({"item": item})
    возвращать результаты
 

Примечание

Обратите внимание, что в этом случае элемент , который будет взят из тела, является необязательным. Поскольку он имеет значение по умолчанию None .

Несколько параметров тела

В предыдущем примере операции пути ожидали бы тело JSON с атрибутами Item , например:

 {
    "имя": "Фу",
    "description": "Претендент",
    "цена": 42,0,
    "налог": 3,2
}
 

Но вы также можете объявить несколько параметров тела, например. элемент и пользователь :

Python 3.10+Python 3.6+

 из fastapi импортировать FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, user: User):
    результаты = {"item_id": item_id, "item": элемент, "user": пользователь}
    возвращать результаты
 
 от ввода импортного союза
из fastapi импортировать FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, user: User):
    результаты = {"item_id": item_id, "item": элемент, "user": пользователь}
    возвращать результаты
 

В этом случае FastAPI заметит, что в функции есть более одного параметра тела (два параметра, которые являются моделями Pydantic).

Таким образом, он будет использовать имена параметров в качестве ключей (имен полей) в теле и ожидать тело, подобное:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    },
    "пользователь": {
        "имя пользователя": "дэйв",
        "full_name": "Дэйв Грол"
    }
}
 

Примечание

Обратите внимание, что хотя элемент был объявлен так же, как и раньше, теперь ожидается, что он будет находиться внутри тела с ключом элемент .

FastAPI выполнит автоматическое преобразование из запроса, чтобы параметр элемент получил свое конкретное содержимое и то же самое для пользователя .

Он выполнит проверку составных данных и задокументирует их так же, как для схемы OpenAPI и автоматических документов.

Особые значения в теле

Так же, как Query и Path для определения дополнительных данных для параметров запроса и пути, FastAPI предоставляет эквивалент Body .

Например, расширяя предыдущую модель, вы можете решить, что хотите иметь еще один ключ важность в том же теле, кроме элемента и пользователя .

Если вы объявите его как есть, потому что это единственное число, FastAPI будет считать, что это параметр запроса.

Но вы можете указать FastAPI рассматривать его как еще один ключ тела, используя Body :

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    item_id: int, item: Item, пользователь: User, важность: Annotated[int, Body()]
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item, пользователь: User, важность: int = Body()):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app. put("/items/{item_id}")
async def update_item (item_id: int, item: Item, пользователь: User, важность: int = Body()):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    возвращать результаты
 

В этом случае FastAPI будет ожидать тело вида:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    },
    "пользователь": {
        "имя пользователя": "дэйв",
        "full_name": "Дэйв Грол"
    },
    "важность": 5
}
 

Опять же, он будет преобразовывать типы данных, проверять, документировать и т. д.

Несколько параметров тела и запрос

Конечно, вы также можете объявить дополнительные параметры запроса, когда вам нужно, в дополнение к любым параметрам тела.

Поскольку по умолчанию единичные значения интерпретируются как параметры запроса, вам не нужно явно добавлять Query , вы можете просто сделать:

 q: Union[str, None] = Нет
 

Или в Python 3. 10 и выше:

 кв: ул | Нет = Нет
 

Например:

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    вопрос: ул | Нет = Нет,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app. put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: аннотированный[int, Body(gt=0)],
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: ул | Нет = Нет
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: int = Body (gt = 0),
    вопрос: ул | Нет = Нет,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results. update({"q": q})
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
Пользователь класса (BaseModel):
    имя пользователя: ул
    полное_имя: Union[str, None] = None
@app.put("/items/{item_id}")
асинхронное определение update_item (
    *,
    item_id: целое,
    предмет: предмет,
    пользователь: Пользователь,
    важность: int = Body (gt = 0),
    q: Union[str, None] = None,
):
    results = {"item_id": item_id, "item": элемент, "user": пользователь, "importance": важность}
    если д:
        results.update({"q": q})
    возвращать результаты
 

Встроить одиночный параметр тела

Допустим, у вас есть только один параметр тела item из модели Pydantic Item .

По умолчанию FastAPI ожидает свое тело напрямую.

Но если вы хотите, чтобы он ожидал JSON с ключом item и внутри него содержимым модели, как это происходит при объявлении дополнительных параметров тела, вы можете использовать специальный параметр Body embed :

9Элемент 0028: Элемент = Тело (embed=True)

как в:

Python 3.10+Python 3.9+Python 3.6+Python 3.10+ без аннотацийPython 3.6+ без аннотаций

 из ввода импорта с аннотациями
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 
 от ввода импорта Аннотированный, Союз
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 
 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
из импорта typing_extensions Аннотированный
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Annotated [Item, Body (embed = True)]):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

Совет

Если возможно, используйте версию с аннотациями .

 из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул. 
    описание: ул | Нет = Нет
    цена: плавающая
    налог: плавающий | Нет = Нет
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item = Body (embed = True)):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

Наконечник

Предпочтительнее использовать Аннотированная версия , если возможно.

 от ввода импортного союза
из fastapi import Body, FastAPI
из pydantic импортировать BaseModel
приложение = FastAPI()
Элемент класса (Базовая модель):
    название: ул.
    описание: Union[str, None] = None
    цена: плавающая
    налог: Union[float, None] = None
@app.put("/items/{item_id}")
async def update_item (item_id: int, item: Item = Body (embed = True)):
    результаты = {"item_id": item_id, "item": item}
    возвращать результаты
 

В данном случае FastAPI будет ожидать кузов типа:

 {
    "элемент": {
        "имя": "Фу",
        "description": "Претендент",
        "цена": 42,0,
        "налог": 3,2
    }
}
 

вместо:

 {
    "имя": "Фу",
    "description": "Претендент",
    "цена": 42,0,
    "налог": 3,2
}
 

Резюме

Вы можете добавить несколько параметров тела в свою функцию операции пути , даже если запрос может иметь только одно тело.