簡體   English   中英

如何使用Django REST序列化器?

[英]How to use Django REST Serializers?

因此,在閱讀了Django REST Framework文檔和大量教程之后,我仍然很難理解如何使用Django序列化器將傳入的POST(JSON)數據轉換為Python對象(對不起,我是新手)。

假設我要向api / foo / bar發布JSON字符串,如何編寫其序列化器?

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)

有人可以向我解釋我的串行器應該是什么樣嗎? 以及如何從序列化器訪問序列化的數據?

由於您不想使用模型,因此必須從頭開始創建序列化程序。 這樣的事情也許應該起作用:

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模型,因此您將無法保存序列化數據(因此,數據庫中將不會保存任何內容)

基本上,您將JSON數據傳遞給序列化器,然后訪問數據字段,這將返回有序字典。

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)

您不必使用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 網站

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM