Python Django序列化程序与rest_框架序列化程序
Python Django序列化程序与rest_框架序列化程序,python,json,django,python-3.x,django-rest-framework,Python,Json,Django,Python 3.x,Django Rest Framework,Django序列化程序与rest\u框架序列化程序之间有什么区别? 我正在制作一个webapp,我希望API成为项目创建的主应用程序的一部分。不为API功能创建单独的应用程序。对于Django视图和模型,我需要使用哪个序列化程序,同时它也可以用于API from django.core import serializers 这是一种默认与高级的情况。Django序列化只有一页文档,而Django Rest有一个完整的网站。如果您的应用程序使用了大量API,那么安装整个框架是有意义的。但是对于
Django序列化程序
与rest\u框架序列化程序
之间有什么区别?
我正在制作一个webapp,我希望API成为项目创建的主应用程序的一部分。不为API功能创建单独的应用程序。对于Django视图和模型,我需要使用哪个序列化程序,同时它也可以用于API
from django.core import serializers
这是一种默认与高级的情况。Django序列化只有一页文档,而Django Rest有一个完整的网站。如果您的应用程序使用了大量API,那么安装整个框架是有意义的。但是对于较小的API,您只需要使用默认的Django API。不需要同时使用两者。另外,在视图中使用序列化程序。tl;博士 如果您只想创建几个非常小的API端点,而不想使用DRF。Django core序列化程序不适用于外部使用者。
您可以在项目中使用相同的主应用程序,并使其与DRF并行工作。只需添加一个带有定义的
serializers.py
文件,在相同的views.py
文件中添加DRF逻辑,然后进行路由。你可以用
差异的详细解释
假设您有以下模型
class员工(models.Model):
标识号=型号.CharField(最大长度=12)
first_name=models.CharField(最大长度=50)
last_name=models.CharField(最大长度=50)
您希望创建一个端点/employees/
,该端点返回所有具有JSON表示的此类对象
{
"first_name": "Jon",
"last_name": "Skeet"
}
使用Django序列化程序 来自django.core导入序列化程序的
从django.http导入HttpResponse
类EmployeeView(视图):
def get(自我,请求):
employees=Employee.objects.all()
serialized=序列化程序。序列化(
“json”,
员工,
字段=('first_name'、'last_name'),
)
返回HttpResponse(序列化)
你得到的结果是一个字典列表
{
"fields" : {
"first_name" : "Jon",
"last_name" : "Skeet"
},
"model" : "employees.Employee",
"pk" : 12
}
但这不是我们要找的。Django核心序列化程序的目的是。这一点通过以下事实得以明确
python manage.py dumpdata employees.Employee | json_pp
现在,当然您可以对代码做一些事情来获得所需的表示,但是此模块不用于外部使用者使用的API视图
使用Django REST框架 在这里,我们可以创建独立于模型的序列化程序类。这一点很重要,因为对象的外部表示与内部表示是分开的
class EmployeeSerializer(serializers.ModelSerializer):
类元:
模型=员工
字段=(
“名字”,
“姓”,
)
并且,尝试只使用DRF最基本的序列化-反序列化功能,我们会得到
从rest\u framework.renders导入JSONRenderer
从django.http导入HttpResponse
类EmployeeView(视图):
def get(自我,请求):
employees=Employee.objects.all()
serialized=EmployeeSerializer(employees,many=True)
json_representation=JSONRenderer().render(序列化的.data)
返回HttpResponse(json_表示)
结果就是我们要找的代表
当然,您通常不会像上一个示例中那样使用DRF,而是
从rest\u框架导入视图集
类EmployeeViewSet(viewsets.ReadOnlyModelViewSet):
queryset=Employee.objects.all()
serializer\u class=EmployeeSerializer
它处理了所有的样板文件,因此非常方便,与Django core序列化程序相比,这是为外部消费者准备的。感谢您的详细回答。
{
"fields" : {
"first_name" : "Jon",
"last_name" : "Skeet"
},
"model" : "employees.Employee",
"pk" : 12
}
[
{
"fields" : {
"identification_number" : "20201293",
"first_name" : "Jon",
"last_name" : "Skeet"
},
"model" : "employees.Employee",
"pk" : 12
}
]