Проверка POST-параметров с помощью сериализаторов в Django

Я пытаюсь реализовать простой валидатор для моих POST-параметров

Мой вход выглядит следующим образом:

{
  "gage_id": "01010000",
  "forcing_source":"my_source",
  "forcing_path":"my_path"
}

У меня есть следующий сериализатор:

class SaveTab1Serializer(Serializer):
    gage_id = CharField(min_length=1, required=True),
    forcing_source = CharField(min_length=1, required=True),
    forcing_path = CharField(min_length=1, required=True),

И я использую его следующим образом:

@api_view(['POST'])
def save_tab1(request):
    body = json.loads(request.body)
    ser = SaveTab1Serializer(data=body)
    print('serializer', ser.is_valid())
    print('errors', ser.errors)

Но теперь, что бы я ни делал с данными, они отображаются только как валидные без ошибок. Есть ли еще код, который нужно добавить в сериализатор, чтобы выполнить проверку?

У вас почти незаметная синтаксическая ошибка в сериализаторе. Поля сериализатора должны добавляться "отдельно", вам не нужны (и не должны использоваться) запятые в конце. По неизвестным мне причинам это нарушает способность сериализатора правильно обрабатывать поля.

Вот самостоятельное доказательство концепции:

# test.py
import json
from rest_framework             import serializers
from rest_framework.decorators  import api_view, permission_classes
from rest_framework.permissions import AllowAny
from rest_framework.response    import Response


class SaveTab1Serializer(serializers.Serializer):
    gage_id = serializers.CharField(min_length=2, required=True)
    forcing_source = serializers.CharField(min_length=2, required=True)
    forcing_path = serializers.CharField(min_length=2, required=True)


@api_view(['POST'])
@permission_classes([AllowAny])
def save_tab1(request):
    body = json.loads(request.body)
    ser = SaveTab1Serializer(data=body)
    print('serializer', ser.is_valid())
    print('errors', ser.errors)
    return Response({ "data": body, "data_is_valid": ser.is_valid(), "data_errors": ser.errors })

# urls.py
path('test/', save_tab1, name='test'),

Postman

Postman

Для сравнения, вот то же самое выполнение, но с запятыми в конце:

Postman

Вернуться на верх