【问题标题】:Is it mandatory to use serializer in Django viewset?是否必须在 Django 视图集中使用序列化程序?
【发布时间】:2021-06-08 16:34:27
【问题描述】:

我在 Django rest 框架中使用视图集。我已经看到很多例子表明到处都在使用序列化程序。如果我不想使用序列化程序怎么办,或者如果我没有模型可以使用序列化程序怎么办?而我只想返回简单的响应数据?

以下只是我如何使用它的示例。

from rest_framework.response import Response
from rest_framework import status, viewsets

class UserViewSet(viewsets.ViewSet):

    def create(self, request):
        data = {'name': 'Shiv', 'email':'example@gmail.com'}
        return Response(data, status=status.HTTP_201_CREATED)

如您所见,我没有序列化程序,并且代码运行良好。那么这是一个好习惯吗?

(我在 Code Review 门户中发布了相同的问题,但没有得到足够的回应)。

【问题讨论】:

  • 委托人?不,好的做法?通常是的,因为序列化器工作双向:它具有序列化对象、反序列化以进行创建、反序列化以进行更新等的逻辑。
  • ViewSet的主要收获是,不需要创建不同的url eg: 1. list : /api 2. detail /api/id 3. post /api/ 4. put /api /id/ 5. 修补 /api/id , 6 删除 /api/id ,因此如果视图集附加到路由器,则上述所有 urls/方法都将起作用。在您的情况下,只需使用 APIView
  • 谢谢@Jisson...我明白了...

标签: python-3.x django django-rest-framework django-serializer


【解决方案1】:

如您所见,我没有序列化程序,并且代码运行良好。那么这是一个好习惯吗?

这是强制性的吗? 没有,但通常很方便。

ViewSet,顾名思义,是一组视图。所以通常它并不意味着只实现一个功能,而是几个功能。例如检索记录列表、检索记录的详细信息、创建新记录、更新现有记录以及删除现有记录。我们不需要序列化器,但它需要编写大量代码。如果您稍后在模型中添加一个字段,则需要更新其中大部分功能,因此需要更多的努力。

序列化器是一种工具,通常用于定义模型及其序列化表示之间的双向映射。因此,它使得从模型对象中检索数据以及创建更新这样的对象更加方便。您因此指定映射如何工作,但您不需要自己实现这三个功能,或者至少大部分逻辑都被抽象掉了。

因此,使用序列化程序意味着减少工作量,并使软件不易出错。

【讨论】:

    猜你喜欢
    • 2021-06-03
    • 2017-06-21
    • 1970-01-01
    • 2015-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 2021-12-28
    • 2010-10-29
    相关资源
    最近更新 更多