在使用Django Rest Framework(DRF)编写基于类的视图(CBV)时,最好使用GenericAPIView或基本APIView

时间:2019-03-10 06:42:31

标签: django django-rest-framework swagger-2.0 django-swagger

过去一年左右,我一直在使用django进行编码,而我的大部分工作是编写API以连接到基于React的前端。在我的大多数教程中,我看到人们使用GenericAPIViews作为基础知识,但是我发现对于API中的复杂代码没有什么实质意义。因此,为了及时交付我的代码,我选择了更简单的解决方案,即使用API​​View,其中我使用了更少的抽象,对我的代码有更多控制(通过编写更多代码),并且清楚地了解了我的代码模块的功能。

我担心的是,如果我选择快捷方式是选择不学习如何使用GenericAPIViews,这样我就可以充分利用它。我一般在使用GenericAPIViews或DRF时遇到的一些问题。

  • 自定义权限(例如,我想要一个经过身份验证并且还具有特定权限级别(例如can_do_xyz或has_access_to_abc)的访问权限的用户)
  • 使用可写的序列化器,可能需要遍历业务/应用逻辑的复杂层
  • 在同一GenericAPIView类函数中为多个模型创建条目。

就目前而言,我在使用基本APIView时遇到的问题是,我设法编写的草率文档是垃圾。

  • 我需要在api模式文档中手动指定查询/表单/路径字段(使用AutoSchema)
  • 如果API的get / post / put / delete方法具有不同的字段,那么每个API端点都会显示所有在方法中使用的字段(这是可以理解的,因为我为类定义了架构,不适用于单独的功能)。有什么办法可以解决这个问题?
  • delete方法仅需要使用survey_id作为参数,而POST / PUT方法将需要正文。

2 个答案:

答案 0 :(得分:2)

我个人更喜欢使用GenericAPIViews和适当的mixins,虽然比较冗长,但是我对添加的REST操作有更多的控制权,我认为它对其他与我的项目合作的开发人员有帮助。

要管理其余文档,可以使用drf-yasg,该方法允许告诉每种方法的序列化器。

答案 1 :(得分:1)

我不会建议使用GenericAPIView,因为假设您只有一个用于get方法的API,并且您正在使用GenericAPIView,它将不必要显示很多方法(get / put / delete / post),而您只需要get。这样的话,我会建议您根据需要使用UpdateAPIView,RetrieveAPIView,ListAPIView,CreateAPIView中的任何一个。