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.5 KiB

Використання Request безпосередньо

Дотепер ви оголошували потрібні вам частини запиту разом з їх типами.

Отримуючи дані з:

  • шляху як параметрів;
  • заголовків;
  • кукі;
  • тощо.

І таким чином FastAPI перевіряє ці дані, перетворює їх і автоматично генерує документацію для вашого API.

Але бувають ситуації, коли може знадобитися доступ до об'єкта Request безпосередньо.

Деталі про об'єкт Request

Оскільки під капотом FastAPI - це Starlette з шаром інструментів зверху, ви можете за потреби використовувати об'єкт Request Starlette безпосередньо.

Це також означає, що якщо ви отримуєте дані безпосередньо з об'єкта Request (наприклад, читаєте тіло), FastAPI не буде їх перевіряти, перетворювати або документувати (через OpenAPI для автоматичного інтерфейсу користувача API).

Водночас будь-який інший параметр, оголошений звичайним способом (наприклад, тіло з моделлю Pydantic), і надалі буде перевірений, перетворений, анотований тощо.

Але є окремі випадки, коли корисно отримати об'єкт Request.

Використовуйте об'єкт Request безпосередньо

Припустімо, ви хочете отримати IP-адресу/хост клієнта всередині вашої функції операції шляху.

Для цього потрібно звернутися до запиту безпосередньо.

{* ../../docs_src/using_request_directly/tutorial001_py310.py hl[1,7:8] *}

Якщо вказати у функції операції шляху параметр типу Request, FastAPI передасть у нього об'єкт Request.

/// tip | Порада

Зауважте, що в цьому прикладі ми оголошуємо параметр шляху поряд із параметром запиту.

Тому параметр шляху буде витягнуто, перевірено, перетворено до вказаного типу та анотовано в OpenAPI.

Так само ви можете оголошувати будь-які інші параметри звичайним чином і додатково отримувати Request.

///

Документація Request

Докладніше про об'єкт [Request] на офіційному сайті документації Starlette.

/// note | Технічні деталі

Ви також можете використати from starlette.requests import Request.

FastAPI надає його безпосередньо як зручність для вас, розробника. Але він походить безпосередньо із Starlette.

///