Параметр response_model
Параметр response_model передаётся в декораторы маршрутов
get, post, put, patch, delete
и другие методы приложения FastAPI.
Он принимает класс Pydantic-модели или список моделей.
FastAPI использует эту модель для валидации,
фильтрации лишних полей и генерации схемы OpenAPI.
Если обработчик вернёт данные, не соответствующие модели,
FastAPI выбросит ошибку валидации.
Синтаксис
@app.get(path, response_model=Model)
Пример
Давайте объявим модель User и укажем её в параметре response_model:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.get('/user', response_model=User)
def get_user():
return {'name': 'abcde', 'age': 25}
Результат выполнения кода для адреса /user:
{"name": "abcde", "age": 25}
Пример
Параметр response_model отфильтровывает лишние поля.
Вернём словарь с дополнительным ключом password:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.get('/user', response_model=User)
def get_user():
return {'name': 'abcde', 'age': 25, 'password': 'secret'}
Результат выполнения кода для адреса /user:
{"name": "abcde", "age": 25}
Ключ password не попал в ответ,
потому что его нет в модели User.
Пример
Давайте укажем список моделей через list[User]:
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class User(BaseModel):
name: str
age: int
@app.get('/users', response_model=list[User])
def get_users():
return [
{'name': 'abcde', 'age': 25},
{'name': 'user', 'age': 30},
]
Результат выполнения кода для адреса /users:
[{"name": "abcde", "age": 25}, {"name": "user", "age": 30}]
Смотрите также
-
метод
get,
который вешает обработчик на GET-запрос -
параметр
response_class,
который задаёт класс ответа вместо JSON -
параметр
responses,
который описывает дополнительные ответы в схеме OpenAPI -
параметр
status_code,
который задаёт HTTP-код ответа по умолчанию