Первые шаги¶
Создадим простейшую валидированную Django-вьюху шаг за шагом.
Установка¶
Добавь в INSTALLED_APPS¶
settings.py
INSTALLED_APPS = [
"django.contrib.contenttypes",
"django.contrib.auth",
"django_pydantic", # добавь это
# твои приложения...
]
Middleware устанавливается автоматически
В MIDDLEWARE ничего добавлять не нужно. django_pydantic сам подключает
PydanticValidationMiddleware при запуске Django.
Создай схему¶
Внутри своего Django-приложения создай schema.py:
RequestModel — это подкласс pydantic.BaseModel с одной доп. возможностью: принимает Django HttpRequest первым аргументом.
Напиши вьюху¶
myapp/views.py
from django.http import JsonResponse
from .schema import HelloSchema
def hello(request):
data = HelloSchema(request) # (1)!
return JsonResponse({"message": f"Привет, {data.name}!"}, json_dumps_params={"ensure_ascii": False})
- Если
nameотсутствует или невалиден, Pydantic бросаетValidationError. Middleware перехватывает его и возвращает HTTP 422 автоматически. Код вьюхи не выполняется при невалидных данных.
Зарегистрируй URL¶
myapp/urls.py
from django.urls import path
from .views import hello
urlpatterns = [
path("hello/", hello),
]
Проверь¶
Что происходит при ошибке¶
HTTP 422 Unprocessable Entity:
Tip
Поле loc точно указывает клиенту, какое поле не прошло валидацию. Фронтенд
может сразу подсветить нужное поле ввода — без дополнительного кода.
Итог¶
from django_pydantic import RequestModel
class MySchema(RequestModel): # (1)!
field: type
def my_view(request):
data = MySchema(request) # (2)!
... # (3)!
- Наследуйся от
RequestModelвместоBaseModel. - Передай
request— данные извлекаются и валидируются автоматически. - Если код дошёл до этой строки —
dataгарантированно валиден и типизирован.
Далее: Схема запроса → — как это работает изнутри.