我有一个相当复杂的“产品”,准备使用Django构建。在这种情况下,我将避免使用术语“项目”和“应用程序”,因为我不清楚它们在Django中的具体含义。
项目可以有许多应用程序。应用程序可以在许多项目之间共享。精细。
我不是在改造博客或论坛-我看不到产品的任何部分在任何情况下都可以重用。直观地,我将其称为“应用程序”。然后,我是否将所有工作都放在一个“ app”文件夹中?
如果是这样的话 ……就Django的project.app命名空间而言,我倾向于使用myproduct.myproduct,但这当然是不允许的(但是我正在构建的应用程序是我的项目,而我的项目是一个应用程序!)。因此,我导致相信也许我应该通过为每个“重要”模型构建一个应用程序来接近Django,但是我不知道在架构中将边界划分为应用程序的位置-我有很多东西具有相对复杂关系的模型。
project.app
myproduct.myproduct
我希望对此有一个通用的解决方案…
什么是阻止你使用的myproduct.myproduct?要实现该目标,大致需要执行以下操作:
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包。
views.py
现在,你应该怎么做?或更确切地说,我该怎么做?好吧,如果你创建一个显著一块可重复使用的功能,好比说一个标记编辑器中,当你创建一个“顶级应用程序”那可能含有widgets.py,fields.py,context_processors.py等等-你可能要导入所有的东西。
widgets.py,fields.py,context_processors.py
同样,如果你可以创建类似博客这样的格式,并且在安装过程中使用通用格式,则可以将其包装在应用程序中,包括其自己的模板,静态内容文件夹等,并配置Django项目的实例以使用该模板应用程序的内容。
没有硬性规定可以执行此操作,但这是框架的目标之一。包括模板在内的所有内容,都允许你从某个共同的基础进行包含,这意味着你的博客应仅通过照顾自己的部分而紧密地适合任何其他设置。
但是,要解决你的实际问题,是的,没有什么可以说你不能使用顶级项目文件夹。这就是应用程序要做的,如果你确实愿意,你可以这样做。但是,出于以下几个原因,我倾向于不这样做:
一旦你从使用startproject和毕业startapp,就不会阻止你在同一Python软件包中组合“项目”和“应用”。项目实际上只不过是一个settings模块,而应用程序实际上只不过是一个models模块-其他所有内容都是可选的。
startproject
startapp
settings
models
对于小型网站,拥有类似以下内容是完全合理的:
site/ models.py settings.py tests.py urls.py views.py