3

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

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

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

目前,我在使用基本 APIView 的方法中遇到的问题是,我设法编写的招摇文档是垃圾。

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

2 回答 2

2

就我个人而言,我更喜欢使用 GenericAPIViews 和合适的 mixins,它更冗长,但我对添加的 REST 操作有更多的控制权,我认为它有助于其他与我的项目一起工作的开发人员。

为了管理其余文档,您可以使用允许告诉序列化程序的每个方法的drf-yasg 。

于 2019-03-10T17:17:30.103 回答
0

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

于 2019-08-23T10:56:40.677 回答