Перейти до змісту

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

🌐 Переклад ШІ та людьми

Цей переклад виконано ШІ під керівництвом людей. 🤝

Можливі помилки через неправильне розуміння початкового змісту або неприродні формулювання тощо. 🤖

Ви можете покращити цей переклад, допомігши нам краще спрямовувати AI LLM.

Англійська версія

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

Отримуючи дані з: - шляху як параметрів; - заголовків; - кукі; - тощо.

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

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

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

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

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

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

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

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

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

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

from fastapi import FastAPI, Request

app = FastAPI()


@app.get("/items/{item_id}")
def read_root(item_id: str, request: Request):
    client_host = request.client.host
    return {"client_host": client_host, "item_id": item_id}

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

Порада

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

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

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

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

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

Технічні деталі

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

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