如何使用 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
所以,在阅读了 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