Платформа Django rest возвращает сообщения об ошибках проверки с конечных точек

#django #django-rest-framework #django-serializer

#django #django-rest-framework #django-сериализатор

Вопрос:

Использование

 Django==3.0.8
djangorestframework==3.11.0
 

Я пытаюсь проверить конечную точку GET, которая выглядит следующим образом.

 /users?role=Prospectamp;limit=10amp;offset=0
 

Как мы можем проверить этот запрос в DRF с помощью serializers.Serializer и получить все сообщения об ошибках проверки, если они недействительны, и вернуть их в ответе api?

Сериализатор, используемый для этого запроса:

 class UserIndexSerializer(serializers.Serializer):
    offset = serializers.IntegerField(required=True)
    limit = serializers.IntegerField(required=True)
    role = serializers.CharField(allow_null=True, default=None, max_length=255)
 

Функция просмотра выглядит следующим образом:

 @api_view(["GET"])
def user_list(request):
    serializer = UserIndexSerializer(data=request.data) // trying to validate using this serializer
    print("query params", request.GET)
    print("request valid", serializer.is_valid())
    users = User.objects.all()
    serializer = UserGetSerializer(users, many=True)
    return AppResponse.success("User list found.", serializer.data)
 

Ответ №1:

Вам нужно использовать serializers.ValidationError здесь. Чтобы проверить поле name xyz , вам нужно создать функцию с именем validate_xyz и написать в ней свой код проверки. Например, чтобы проверить поле ограничения вашего сериализатора, нам нужно сделать:

 class UserIndexSerializer(serializers.Serializer):
    offset = serializers.IntegerField(required=True)
    limit = serializers.IntegerField(required=True)
    role = serializers.CharField(allow_null=True, default=None, max_length=255)
    
    def validate_limit(self, value):
        if limit > 5:
            raise serializers.ValidationError('Limit cannot exceed 5.')
        return value
 

После определения этих функций валидатора вы можете проверить, действителен ли сериализатор, выполнив

 serializer.is_valid()
 

django-rest-framework принимает ошибки проверки, если таковые имеются, и действует соответствующим образом.

  • вам необходимо вернуть значение из функции проверки.