Ответ
FastAPI предоставляет гибкие возможности для возврата различных типов ответов, автоматически выполняя сериализацию данных и установку корректного `Content-Type` заголовка.
Основные типы возвращаемых данных:
1. **Модели Pydantic**
Это основной и рекомендуемый способ. FastAPI автоматически преобразует модель в JSON, валидирует данные ответа и генерирует OpenAPI схему.
```python
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.get("/items/1", response_model=Item)
def get_item():
return Item(name="My Item", price=10.5)
```
2. **Словарь (`dict`) или список (`list`)**
Любой `dict` или `list` будет автоматически сериализован в JSON.
```python
@app.get("/info")
def get_info():
return {"version": "1.0", "status": "ok"}
```
3. **Объекты `Response`**
Для полного контроля над ответом (статус-код, заголовки, cookies) можно напрямую вернуть экземпляр класса `Response` или его наследников.
```python
from fastapi import Response
@app.get("/legacy")
def get_legacy_data():
data = "some_xml"
return Response(content=data, media_type="application/xml")
```
4. **Специализированные классы `Response`**
FastAPI предоставляет готовые классы для распространенных задач:
* `JSONResponse`: для явного возврата JSON с кастомными заголовками.
* `HTMLResponse`: для возврата HTML-страниц.
* `PlainTextResponse`: для простого текста.
* `RedirectResponse`: для выполнения HTTP-перенаправлений.
* `FileResponse`: для отправки файла из файловой системы.
* `StreamingResponse`: для потоковой передачи данных (например, при генерации большого файла).
```python
from fastapi.responses import HTMLResponse, RedirectResponse
@app.get("/home", response_class=HTMLResponse)
def home():
return "
Welcome Home
" @app.get("/docs-redirect") def redirect_to_docs(): return RedirectResponse(url="/docs") ``` 5. **Простые типы** Можно возвращать и простые типы, такие как `str`, `int`, `bytes`. FastAPI автоматически обернет их в соответствующий `Response` (например, `PlainTextResponse` для `str`).Ответ 18+ 🔞
А, слушай, смотри, вот эта FastAPI штука — она же, блядь, как швейцарский нож, только для ответов от сервера! Можешь возвращать что угодно, а она сама всё красиво упакует, заголовки правильные проставит, в рот меня чих-пых! Главное — не выебывайся сверх меры.
Ну, типа, основные варианты, которые в жизни пригодятся:
**1. Pydantic-модели — это святое, ёпта!**
Вот это прям канон. Напишешь класс, опишешь в нём, что должно вернуться, а FastAPI сама проверит, что ты там не какую-то хуйню отдаёшь, в JSON завернёт и в документацию красивую добавит. Вообще огонь.
```python
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
@app.get("/items/1", response_model=Item)
def get_item():
return Item(name="My Item", price=10.5) # И всё, блядь! Больше ничего не надо!
```
**2. Обычный словарик или список**
Ну, тут всё просто, как три копейки. Вернул `dict` или `list` — получил JSON. Никакой магии, но работает, сука, идеально.
```python
@app.get("/info")
def get_info():
return {"version": "1.0", "status": "ok"} # И похуй, что там внутри!
```
**3. Полный контроль через `Response`**
А вот если тебе надо, чтобы всё было по твоей, блядь, указке — статус код свой, заголовки свои, да ещё и XML какой-нибудь левый отправить... Тогда бери в руки `Response` и делай что хочешь!
```python
from fastapi import Response
@app.get("/legacy")
def get_legacy_data():
data = "some_xml"
return Response(content=data, media_type="application/xml") # На, подавись, современный мир!
```
**4. Готовые ответы на все случаи жизни**
Тут тебе и `JSONResponse` для кастомного JSON, и `HTMLResponse` для страничек, и `RedirectResponse` для перенаправлений — вообще, овердохуища вариантов! Хочешь файл отдать — `FileResponse`, хочешь потоком гнать данные — `StreamingResponse`. Красота, а не жизнь!
```python
from fastapi.responses import HTMLResponse, RedirectResponse
@app.get("/home", response_class=HTMLResponse)
def home():
return "