在 Django 中使用序列化器验证 POST 参数

问题描述 投票:0回答:1

我正在尝试为我的 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)

但是无论我对数据做什么,它都只显示为有效,没有错误。 我需要向序列化器添加更多代码来进行验证吗?

python django validation django-rest-framework django-serializer
1个回答
0
投票

您的序列化程序中有一个几乎不易察觉的语法错误。序列化器字段应该“独立”添加,您不需要(也不应该使用)尾随逗号。由于我不知道的原因,这会扰乱序列化器正确处理字段的能力。

这是一个独立的概念证明:

# 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

© www.soinside.com 2019 - 2024. All rights reserved.