我有一个相当复杂的"产品",我正准备使用Django构建它.在本文中,我将避免使用"项目"和"应用程序"这两个术语,因为我不清楚它们在Django中的具体含义.

项目可以有很多应用程序.应用程序可以在许多项目中共享.好的

我不是在重新发明博客或论坛--我没有看到我的产品的任何部分在任何情况下都是可重用的.凭直觉,我会把这个叫做"应用程序".那么我的所有工作都是在一个"app"文件夹中完成的吗?

If so... 就Django的project.app名称空间而言,我倾向于使用myproduct.myproduct,但这当然是不允许的(但我正在构建的应用程序是我的项目,我的项目是一个应用程序!).因此,我相信,也许我应该通过 for each "重要"模型构建一个应用程序来接近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.pyfields.pycontext_processors.py等等——所有你可能想要导入的东西.

类似地,如果你能以一种跨安装非常通用的格式创建一个类似博客的东西,你可以用自己的模板、静电内容文件夹等把它包装在一个应用程序中,然后配置django项目的一个实例来使用该应用程序的内容.

没有硬性规定要求您必须这样做,但这是框架的目标之一.事实上,所有的东西,包括模板,都允许你从一些共同的基础上加入,这意味着你的博客应该紧密地融入任何其他设置,只需照顾好自己的一部分.

然而,为了解决您的实际问题,是的,没有任何东西表明您不能使用顶级项目文件夹.如果你真的想做的话,你可以做.然而,出于以下几个原因,我倾向于不这么做:

  • Django的默认设置不会这样做.
  • 通常,我想创建一个主应用程序,所以我创建了一个,通常名为website.然而,在以后的日子里,我可能想要开发这个网站的原始功能.为了使其可删除(无论我是否这样做),我倾向于创建一个单独的目录.这也意味着我只需从配置中取消该包的链接并删除文件夹,就可以删除上述功能,而不是复杂地从全局urls.py文件夹中删除正确的URL.
  • 很多时候,即使我想让某个东西独立,它也需要在我照顾它/让它独立的同时住在某个地方.基本上是上述情况,但对于我确实想做的通用的东西.
  • 我的顶层文件夹通常包含一些其他内容,包括但不限于WSGI脚本、SQL脚本等.
  • Django的management extensions依赖于子目录.因此,对包进行适当的命名是有意义的.

简而言之,有一个约定的原因与任何其他约定都是一样的-当涉及到其他使用您的项目的人时,它会有所帮助.如果我看到fields.py,我马上就会认为其中的代码是Django字段的子类,而如果我看到inputtypes.py,如果不看它,我可能不太清楚这意味着什么.

Python相关问答推荐

Tokenizer Docker:无法为Tokenizer构建轮子,这是安装pyproject.toml项目所需的

ValueRight:参数目标和输出必须具有相同的形状.接收:目标.形状=(无,512),输出.形状=(无,3)

从 struct 类型创建MultiPolygon对象,并使用Polars列出[list[f64]列

给定数据点,制定它们的关系

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

运行回文查找器代码时发生错误:[类型错误:builtin_index_or_system对象不可订阅]

TARete错误:类型对象任务没有属性模型'

Django管理面板显示字段最大长度而不是字段名称

如何比较numPy数组中的两个图像以获取它们不同的像素

韦尔福德方差与Numpy方差不同

Django mysql图标不适用于小 case

如何在Raspberry Pi上检测USB并使用Python访问它?

如何在WSL2中更新Python到最新版本(3.12.2)?

在极性中创建条件累积和

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

将scipy. sparse矩阵直接保存为常规txt文件

Python—转换日期:价目表到新行

OpenCV轮廓.很难找到给定图像的所需轮廓

如何在Python中使用Iscolc迭代器实现观察者模式?

如果有2个或3个,则从pandas列中删除空格