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

Використання 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.