Django 中 REST API 的目录结构应该是什么?

Par*_*ras 3 django python-3.x django-rest-framework

我开始使用 Djano 框架开发 REST API。以前,我专门使用 SpringBoot 与 Java 相关框架进行了广泛的合作。

如果我以基于 Java 的框架中的 REST API 为例,下面是我最常用的目录结构:

在此处输入图片说明

所以一些主要是关于MVC 设计模式的。同样在java中,每个类都写在一个新文件上,但是我一直在寻找的教程在一个文件中编写了多个类,这是关于Django的最佳实践吗?

我还看到在 Django 中我们创建了一个项目,然后在其中创建了一个应用程序。这些应用程序相当于java中的包吗?

此外,在 SpringBoot 和其他与 Java 相关的框架中,我们通常遵循自顶向下的方法,其中控制器接收一个调用,该调用进一步传递给所有业务逻辑所在的服务,然后服务进一步调用 CRUD 的 DAO(Repository) 和相应的结果从 DAO 传递到服务,返回到生成格式化响应的控制器。

我在 Django 中看到的所有逻辑都是写在为 CRUD 调用模型的视图上的。我们在这里不遵循 SOLID 原则吗?

如果我举一个图书馆管理系统的例子,人们将如何围绕 Django 框架设计它?

Dan*_*per 6

这是一个很好的问题,但我不确定 StackOverflow 是问它的正确地方,因为没有明确的答案。也就是说,我正在尝试尝试。

Django 也遵循 MVC 设计模式,但命名有点不同。

  • Django 模型 -> MVC 模型
  • Django 视图 -> MVC 控制器
  • Django 模板 -> MVC 视图

它通常被称为 MTV 而不是 MVC。但这并不是故事的结局,因为许多人认为出于可测试性和可重用性等原因,在视图中放入过多的业务逻辑是一个坏主意。这个问题有两种常见的方法:

  • 胖模型:您将所有业务逻辑放在模型中
  • 服务:您有单独的模块,其中包含用于业务逻辑的方法/类

就我个人而言,我曾与两者合作过,并且在服务方法方面有更好的经验。

Django 中 DAO 的等价物可能是 Django ORM。请注意,这实际上只是支持的关系数据库的抽象层。如果您想使用其他数据源,如 NoSQL DB 或 REST API,您必须推出自己的解决方案或寻找第三方包。

Java 每个文件只能有一个公共类,并且它们必须具有相同的名称。Python 没有这个限制,因此每个文件有多个类确实是最佳实践(.py 文件称为模块)。如果模块/文件变得太大,您可以将其转换为__init__.py包含多个模块(和/或子包)的包(包含文件的目录)。

app 和 project 之间的区别可能令人困惑,所以我写了一篇关于 Django 命名方案的整篇文章。Django 应用程序是一个 Python 包,但它们通常按域组织。例如,在图书馆管理系统中,您的library项目可能有一个应用程序catalogue来管理库存,还有一个checkout应用程序来管理借书的过程。

最后,如果您专门打算构建 REST API,我强烈建议您查看Django REST Framework