Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在使用Django Rest框架(DRF)编写基于类的视图(CBV)时,使用GenericAPIView还是基本ApView更好_Django_Django Rest Framework_Swagger 2.0_Django Swagger - Fatal编程技术网

在使用Django Rest框架(DRF)编写基于类的视图(CBV)时,使用GenericAPIView还是基本ApView更好

在使用Django Rest框架(DRF)编写基于类的视图(CBV)时,使用GenericAPIView还是基本ApView更好,django,django-rest-framework,swagger-2.0,django-swagger,Django,Django Rest Framework,Swagger 2.0,Django Swagger,在过去一年左右的时间里,我一直在使用django进行编码,我的大部分工作是编写API以连接到基于React的前端。在我的大多数教程中,我看到人们使用GenericAPIViews作为基础,但我没有发现API中复杂代码的实质内容。因此,为了及时交付代码,我选择了更简单的解决方案,即使用APIView,在这里我使用更少的抽象,对代码有更多的控制(通过编写更多的代码),并清楚地理解代码模块的功能 我担心的是,如果我选择了一条捷径,选择不学习如何使用GenericAPIViews,这样我就可以充分利用它

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

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

  • 自定义权限(例如,我想要一个经过身份验证且具有特定权限级别访问权限的用户(例如,can_do_xyz,或有权访问_abc)
  • 使用可能需要经过复杂的业务/应用程序逻辑层的可写序列化程序
  • 在同一个GenericAPIView类函数中为多个模型创建条目
目前,我在使用基本APIView的方法中遇到的问题是,我设法编写的招摇过市的文档是垃圾

  • 我需要在api模式文档中手动指定查询/表单/路径字段(使用AutoSchema)
  • 此外,如果一个API具有具有不同字段的get/post/put/delete方法,那么swagger中的每个API端点都将显示方法中使用的所有字段(这是可以理解的,因为我为类定义了模式,而不是为单独的函数定义了模式)。是否有办法解决此问题
  • delete方法应该只需要survey_id作为参数,而POST/PUT方法需要body

就个人而言,我更喜欢使用GenericAPIViews和Suiteables Mixin,更详细,但我对添加的REST操作有更多的控制权,我认为这对其他与我的项目合作的开发人员有所帮助


对于管理rest文档,您可以使用允许为每个方法告诉序列化程序的API。

我不建议使用GenericAPIView,因为假设您只有一个用于get方法的API,并且您使用的是GenericAPIView,那么它将不必显示很多方法(get/put/delete/post)然而,你只需要获得。因此,在这种情况下,我建议你根据需要使用UpdateAppiew、RetrieveAppView、ListapView、CreateApView中的任何人

谢谢你让我知道drf yasg!我必须尝试一下。另外,如果你不介意的话,你有没有详细介绍如何在drf中使用mixin的教程/博客(或一般的python)?