如何使用 Django REST 序列化程序?

How to use Django REST Serializers?

所以,在阅读了 Django REST Framework 文档和一堆教程之后,我仍然无法理解如何使用 Django 序列化程序将传入的 POST (JSON) 数据转换为Python 对象(抱歉,我是新手)。

鉴于我要将 JSON 字符串发布到 api/foo/bar,我该如何编写它的序列化程序?

示例JSON:

{ 'name': 'Mr. Foo', address:'Bar Street' }

我的控制器,Foo 包含一个 bar 方法如下:

@detail_route(
    methods=['post']
)
def bar(self, request, uuid=None):
    serializer = MySampleSerializer(data=request.DATA)

    something.clone(serializer.object)
    return Response(status=status.HTTP_201_CREATED)

有人可以向我解释一下我的序列化程序应该是什么样的吗?以及如何从序列化程序访问序列化数据?

基本上,您将 JSON 数据传递给序列化程序,然后访问将 return 有序字典的数据字段。

def bar(self, request, uuid=None):
    serializer = MySampleSerializer(data=request.data)
    if serializer.is_valid(raise_exception=True):
        my_object = serializer.data # Grab the dict of values

定义序列化程序:

class MySampleSerializer(serializers.Serializer):
    name = serializers.CharField(max_length=30)
    address = serializers.CharField(max_length=30)

由于您不想使用模型,因此必须从头开始创建序列化程序。像这样的东西应该可以工作:

class MySerializer(serializers.Serializer):
    name = serializers.CharField(max_length = 100)
    adress = serializers.CharField(max_length = 100)

然后你可以在这样的请求中使用它:

def bar(self, request, uuid=None):
    data = JSONParser().parse(request)
    serializer = MySerializer(data = data)
    return Response(status=status.HTTP_201_CREATED)

但是请注意,由于您尚未创建 Django 模型,因此您将无法保存序列化数据(因此数据库中不会保存任何内容)

您不必使用 ModelSerializer:

from rest_framework import serializers

class CommentSerializer(serializers.Serializer):
    email = serializers.EmailField()
    content = serializers.CharField(max_length=200)
    created = serializers.DateTimeField()

并访问:

serializer = CommentSerializer(data=data)
serializer.is_valid()
# True
serializer.validated_data

顺便说一句,以上内容均来自DRF website