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

时间:2019-01-18 08:11:21

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

我开始使用Djano框架开发REST API。以前,我已经与Java相关的框架(特别是SpringBoot)进行了广泛的合作。

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

enter image description here

主要是 MVC设计模式。 同样在Java中,大多数情况下,每个类都写在一个新文件上,但是我一直在寻找的教程都在一个文件中编写了多个类,这是围绕Django的最佳实践吗?

我还看到在Django中我们创建了一个项目,然后在其中创建了一个应用程序。这些应用程序是否等同于Java中的软件包?

此外,在SpringBoot和其他与Java相关的框架中,我们通常采用自上而下的方法,其中Controller收到一个调用,该调用被进一步传递给所有业务逻辑所在的Service,然后进一步调用CRAO的DAO(Repository)并将相应的结果从DAO传递到Service,再返回到Controller,后者生成格式化的响应。

我在Django中看到的mo琐之处是所有逻辑都写在调用Model for CRUD的视图上。我们不是在这里遵循SOLID原则吗?

如果我以图书馆管理系统为例,那么如何围绕Django框架进行设计?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

就我个人而言,我与他们一起工作,并且在服务方法方面有更好的经验。

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

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

应用程序与项目之间的差异可能会造成混淆,因此我写了整本article about Django's naming scheme。 Django应用是Python软件包,但通常是按域组织的。例如。在图书馆管理系统中,您的library项目可能有一个用于管理目录的应用catalogue和一个用于管理结帐流程的checkout应用。

最后,如果您的目标是构建REST API,我强烈建议您看看Django REST Framework