【问题标题】:Moving from PHP/Laravel to Python/Django从 PHP/Laravel 迁移到 Python/Django
【发布时间】:2015-11-16 18:45:09
【问题描述】:

我想要一些清晰。我想了解更多关于 django 的信息并将其用作 php/laravel 的替代品。但是 django 的默认结构和约定让我有点困惑。

我的 PHP/Laravel 项目有 3 个部分:
- 管理
- 核心(普通用户的网络应用程序)
- API 服务(用于移动应用的 REST-API)

然而,所有的控制器、模型和视图都包含在一个 Laravel 应用程序中。我将 Auth、Admin、Api 控制器分离到它们自己的文件夹/命名空间中。

让我感到困惑的是默认的 Django 结构 1 视图 1 模型文件。如果我的每个控制器在我的 django 项目中都是一个单独的应用程序,或者我应该使用与 Laravel 中相同的方法,我应该如何在 Django 中重新设计这个应用程序。一个项目中有 3 个 Django 应用程序,一个用于管理,一个用于核心,一个用于 api?我应该把我的模型保存在哪里,因为在 Laravel 中所有模型都被所有 3 个部分使用?

我目前的结构:

./  
  ./controllers/
    ./auth/  
      LoginController.php  
      RegistrationController.php  
      ...
    ./admin/    
      ReportsController.php  
      UserController.php (Admins overview of all users)    
      ...
    ./api/  
      HealthController.php (API CRUD for Health resource)  
      ExerciseController.php  
    HomeController.php  
    UserController.php (Regular users profile page CRUD)    
    ...
  ./models/  
    User.php  
    Health.php  
    Exercise.php  
    ...  

【问题讨论】:

  • 你能解释一下“默认的Django结构1视图1模型”吗?我认为您可能对一些简化的示例阅读过多。一个视图当然可以使用多个模型,并且模型可以被多个视图使用。使用来自其他应用程序的视图/模型的视图/模型也没有限制。
  • 我的问题是关于如何在 django 中构建我的应用程序,而不是如何使用模型/视图。我的每个控制器是否有 1 个应用程序,我是否将所有控制器压缩到一个视图中……诸如此类。
  • 我发现 Laravel 的组织与 Django 完全相反。您的所有模型都在模型文件夹中,而在 Django 中,模型、API、视图等都由应用程序分隔(所需功能的逻辑表示。在 Django 中太棒了!

标签: django


【解决方案1】:

关于 Django 要记住的一点是,Laravel 中的应用程序不需要转换为 Django 中的应用程序。在 Django 中,有项目,每个项目可以有任意数量的应用程序。例如,我有一个“备份管理员”项目,我在其中管理许多管理磁带备份环境的日常问题。我有一个媒体应用程序(有 3 种型号,一种用于普通媒体,一种用于清洁媒体,一种用于我们要从磁带弹出中排除的媒体)。我有一个代表备份图像的应用程序,另一个用于备份作业(检查状态代码)。我项目的每个子部分都进入另一个应用程序。

如果我想做另一个与备份无关的 Django 项目,我会创建一个完全独立的项目,它与我的备份项目有一个单独的目录结构。它会有自己的 urls.py、settings.py 等。

关于模型部分,我将一个应用程序的所有模型放在同一个文件中。例如,在我的媒体应用程序中,我有 models.py,其中包含我上面提到的所有三个模型。这是完全可选的,但我只是在将这些模型导入项目的其他部分时这样做,我不必记住文件名是什么,而是可以这样做:

from media.models import CleaningMedia,Media,EjectExclusions

否则,如果它们位于不同的文件中,我将不得不有 3 个不同的导入语句。这是完全可能的,但取决于您的喜好。

关于控制器,Django 允许您以任何一种方式进行操作。您有一个项目范围的 urls.py 文件,可用于控制所有流量,或者您可以在每个应用程序中使用单独的 urls.py 文件来控制该应用程序的流量。我更喜欢单个文件,但这只是我。就个人而言,如果您有很多控制器条目,您可能应该将它们拆分为特定于应用程序的 urls.py 文件,以保持其干净,但同样,任何一种方法都可以工作。当我做出这些类型的决定时,我会想到可维护性(尤其是关于必须支持它的队友)。

管理界面是内置的,因此没有真正的应用程序,但您可以很容易地决定哪些型号和哪些应用程序在管理界面上有条目。每个应用程序都有一个 admin.py 文件来控制它。

附带说明,对于 RESTful API,您可能还需要考虑 Django Rest Framework。这是一款很棒的软件,文档(和教程)非常有用。

编辑: 1 视图/1 模型只是偏好。您可以拥有任意数量的文件。唯一的权衡是当您将它们导入其他文件时,您必须指定要从中导入它的文件。这就是它的全部。我知道有些人有一个 views/ 目录,并且在里面,每个视图都有单独的文件,使每个类/函数保持独立。完全是偏好问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-28
    • 2016-03-30
    • 2017-02-14
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    • 2013-12-12
    相关资源
    最近更新 更多