使用序列化程序作为查询参数验证器是一个好习惯吗?

时间:2017-09-15 08:18:09

标签: python django rest django-rest-framework

序列化程序不会用于创建某些django模型的预期目的,但它将用于查询参数验证,创建过滤查询到elasticsearch,swagger文档描述API。

from rest_framework import views, serializers, fields
from rest_framework.response import Response


class TestQueryParams(serializers.Serializer):
    id = fields.IntegerField(min_value=0)
    date = fields.DateField(format='%Y%m%d')


class TestView(views.APIView):
    def get(self, request):
        qp = TestQueryParams(data=request.query_params)
        qp.is_valid(raise_exception=True)
        # parameters would not be used to create some model
        # but they would be used to get data
        return Response({'some': 'data'})

1 个答案:

答案 0 :(得分:0)

绝对是一个好习惯,因为序列化程序会自动验证字段,并在需要时引发正确的异常。

另一种方法是在视图中手动定义这些验证,或者更糟糕的是 - 每当发送错误的输入时,您的API都会返回500个服务器错误。