当前位置: 首页 > 面试题库 >

Django: “projects” vs “apps”

上官羽
2023-03-14
问题内容

我有一个相当复杂的“产品”,准备使用Django构建。在这种情况下,我将避免使用术语“项目”和“应用程序”,因为我不清楚它们在Django中的具体含义。

项目可以有许多应用程序。应用程序可以在许多项目之间共享。精细。

我不是在改造博客或论坛-我看不到产品的任何部分在任何情况下都可以重用。直观地,我将其称为“应用程序”。然后,我是否将所有工作都放在一个“ app”文件夹中?

如果是这样的话 ……就Django的project.app命名空间而言,我倾向于使用myproduct.myproduct,但这当然是不允许的(但是我正在构建的应用程序是我的项目,而我的项目是一个应用程序!)。因此,我导致相信也许我应该通过为每个“重要”模型构建一个应用程序来接近Django,但是我不知道在架构中将边界划分为应用程序的位置-我有很多东西具有相对复杂关系的模型

我希望对此有一个通用的解决方案…


问题答案:

什么是阻止你使用的myproduct.myproduct?要实现该目标,大致需要执行以下操作:

django-admin.py startproject myproduct
cd myproduct
mkdir myproduct
touch myproduct/__init__.py
touch myproduct/models.py
touch myproduct/views.py

等等。如果我说views.py不必打来电话会有所帮助views.py吗?如果你可以在python路径上命名一个将被处理的函数(通常为package.package.views.function_name)。就那么简单。所有这些“项目” /“应用”东西都只是python包。

现在,你应该怎么做?或更确切地说,我该怎么做?好吧,如果你创建一个显著一块可重复使用的功能,好比说一个标记编辑器中,当你创建一个“顶级应用程序”那可能含有widgets.py,fields.py,context_processors.py等等-你可能要导入所有的东西。

同样,如果你可以创建类似博客这样的格式,并且在安装过程中使用通用格式,则可以将其包装在应用程序中,包括其自己的模板,静态内容文件夹等,并配置Django项目的实例以使用该模板应用程序的内容。

没有硬性规定可以执行此操作,但这是框架的目标之一。包括模板在内的所有内容,都允许你从某个共同的基础进行包含,这意味着你的博客应仅通过照顾自己的部分而紧密地适合任何其他设置。

但是,要解决你的实际问题,是的,没有什么可以说你不能使用顶级项目文件夹。这就是应用程序要做的,如果你确实愿意,你可以这样做。但是,出于以下几个原因,我倾向于不这样做:

  • Django的默认设置不执行此操作。
  • 通常,我想创建一个主应用程序,因此我创建了一个通常称为的应用程序website。但是,稍后我可能只想为此站点开发原始功能。为了使它可移动(无论我是否做过),我倾向于然后创建一个单独的目录。这也意味着我可以仅通过从配置中取消该程序包的链接并删除文件夹来删除所述功能,而不是从全局urls.py文件夹中删除正确的url。
  • 很多时候,即使我想使某事独立,它也需要在我照顾/使其独立的地方居住。基本上是上述情况,但对于某些东西,我确实打算将其设为通用。
  • 我的顶级文件夹通常包含其他一些内容,包括但不限于wsgi脚本,sql脚本等。
  • django的管理扩展依赖于子目录。因此,合理地命名软件包是有意义的。
    简而言之,约定的原因与其他约定相同-当涉及到与你的项目一起工作的其他人时,这很有用。如果我看到fields.py我立即希望其中的代码可以将django的字段作为子类,而如果我看到inputtypes.py我可能不那么清楚就不知道这意味着什么。


 类似资料:
  • 问题内容: 在Django中,以下两个之间有什么区别: 与 我的目标是在每个下方获得一个唯一的注释ID列表。我已经阅读了文档(实际上已经使用了这两种方法)。结果似乎很相似。 问题答案: 该方法返回一个包含字典的QuerySet: 该values_list()方法返回一个包含元组的QuerySet: 如果使用单个字段,则可以使用返回单个值而不是1元组的QuerySet:

  • Projects A website that showcases projects! If you want to use it and it's not exactlyfitting your purpose, please do make upstream changes. We expect this projectto be of use to others and we're happ

  • 问题内容: 编写Django查询时,可以同时使用id / pk作为查询参数。 根据django的文档,我知道pk代表主键,它只是一个快捷方式。但是,尚不清楚何时应使用id或pk。 问题答案: 没关系 从实际的主键字段更加独立,即你不需要关心的主键字段是否被称为或或什么的。 如果你的模型具有不同的主键字段,则还可以提供更高的一致性。

  • ESLint Integrations eslint-plugin-prettier plugs Prettier into your ESLint workflow eslint-config-prettier turns off all ESLint rules that are unnecessary or might conflict with Prettier prettier-esli

  • IntelliJ提供了多种创建配置的方法。 本章讨论创建临时永久配置的选项。 它还讨论了在其他用户之间共享配置的方法。 创建临时配置 运行或调试Java类或测试用例时会创建临时配置。 请考虑以下步骤以了解其工作原理 - 创建一个Java类。 右键单击它并选择“运行”选项。 第一次运行后,临时配置将添加到运行菜单中。 创建永久配置 通过使用IntelliJ保存临时配置,可以将其转换为永久配置。 要保

  • 温馨提示:项目已停止维护 Cyberience Projects 是一个用 PHP CodeIgniter 框架开发的基于 Web 的项目管理系统,主要功能包括项目和任务的协作管理、客户和用户管理、时间跟踪等。