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

标签 python django rest django-rest-framework

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

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'})

最佳答案

这绝对是一个很好的实践,因为序列化器将自动验证字段,并在需要时引发正确的异常。

另一种方法是在 View 中手动定义这些验证,或者更糟 - 每当发送不正确的输入时,让 API 返回 500 个服务器错误。

关于python - 使用序列化器作为查询参数验证器是一个好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46234905/

相关文章:

rest - Orientdb REST API 仅返回 20 条记录

Python将int写入文件

python - 如何在 Python 中编码 JWT?

python - 如何拆分训练集和测试集?

python - Django 类型错误 : url() takes from 2 to 4 positional arguments but 16 were given

django - 运行 Django 管理命令 - 由站点访问者触发

python - 如何在 Django 中向查询集添加自定义属性?

java - 使用 Java http 客户端使用 Sharepoint 2010 REST API 发布数据

python - 为 Keras 多输入模型发布 tf.data.Dataset

java - 使用spring boot的json输出中的日期格式