我正在使用Django创建我的第一个真实网站,但我仍然在努力理解项目和应用程序之间的差异。
例如,我的网站是一个体育新闻网站,其中包含文章,排名表和“固定装置和结果”等部分,我的问题是这些部分中的每一部分是否应该在整个项目内的单独应用程序中?在这种情况下最好的做法是什么?
答案 0 :(得分:46)
项目是指整个应用程序及其所有部分。
app 是指项目的子模块。它是自给自足的,而不是与项目中的其他应用程序交织在一起,理论上,你可以把它拿起来并将其放到另一个项目中而不做任何修改。 app 通常有自己的 models.py (实际上可能是空的)。您可能会将其视为独立的python模块。一个简单的项目可能只有一个应用程序。
对于您的示例,项目是整个网站。您可以构建它,以便有文章的应用,用于排名表的应用,以及用于灯具和结果的应用。如果他们需要彼此互动,他们通过记录良好的公共类和访问器方法来实现。
要记住的主要事情是 apps 之间的这种相互依赖程度。实际上它只是一个项目,所以没有任何意义,但要记住两个应用程序是如何相互依赖的。如果您发现一个应用正在解决两个问题,请将它们分成两个应用。如果你发现两个应用程序是如此交织在一起,那么你就永远不能重复使用另一个应用程序,将它们组合成一个应用程序。
答案 1 :(得分:11)
理想情况下,您的项目应由应用组成。这就是为什么在使用命令行时,您创建一个项目,稍后,将该应用程序添加到该项目。
应用程序旨在为您的项目带来模块化。例如,如果您构建articles app
,理想情况,则可以在体育新闻项目中使用它,并在需要最少或不需要修改的新项目中重复使用它。它的settings
- 比如说博客项目。
应用程序是一种可以重用的软件。您的项目仅代表您的特定需求。
看看Django Project Structure。它可以让您对组织Django项目的最佳实践有所了解。
Google上还有一些可搜索的博客文章可以解决这个问题:
答案 2 :(得分:6)
允许了解项目和App在Django与此实际的例子:
假设您正在Django中建立在线购物网站(电子商务网站):
项目:
它只是您的网站名称。 Django将创建一个python package并为其提供一个您提供的名称。假设我们将其命名为 my_shopping_site 。
您可以使用此命令在Django中创建项目
python manage.py startproject my_shopping_site
这将在您的工作目录中创建my_shopping_site
目录,结构如下所示:
my_shopping_site/
manage.py
my_shopping_site/ #<--- That is a python package
__init__.py #<--- This makes it a python package
settings.py #<--- module 1
urls.py #<--- module 2
wsgi.py #<--- module 3
应用程序:
它的那些小部件,它们一起构成了您的项目。它们是您项目的功能。在我们的例子(购物网站),这将是:
车: - 这将用于购买用户选择的项的逻辑
产品的: - 这会对产品的逻辑,该网站是销售
资料: - 这将具有一个逻辑,用于用户信息
-------------------------------------------------------------------
my_shopping_site Products Profile Cart
-------------------------------------------------------------------
,您可以使用以下命令创建这些应用:
python manage.py startapp cart
python manage.py startapp products
python manage.py startapp profile
的结构是这样的:
my_shopping_site/ #<--- project_name
manage.py
products/ #<--- app 1
cart/ #<--- app 2
profile/ #<--- app 3
my_shopping_site/
每个应用程序焦点上项目的一个单一的逻辑块。
答案 3 :(得分:0)
根据 Django 官方文档
<块引用>项目与应用
项目和应用有什么区别?应用程序是一个网络 做某事的应用程序——例如,一个网络日志系统,一个数据库 公共记录或小型投票应用程序。一个项目是一个集合 特定网站的配置和应用程序。一个项目可以包含 多个应用程序。一个应用可以在多个项目中。