【发布时间】:2010-04-19 12:21:29
【问题描述】:
我知道一个网站可以有很多应用程序,但我看到的所有示例都有一个名为“mysite”的网站。我认为该站点将是您站点的名称,例如 StackOverflow。
您会这样做,然后拥有“身份验证”、“问题”和“搜索”等应用程序吗?或者你真的只有一个名为 mysite 的网站和一个名为 StackOverflow 的应用程序吗?
【问题讨论】:
我知道一个网站可以有很多应用程序,但我看到的所有示例都有一个名为“mysite”的网站。我认为该站点将是您站点的名称,例如 StackOverflow。
您会这样做,然后拥有“身份验证”、“问题”和“搜索”等应用程序吗?或者你真的只有一个名为 mysite 的网站和一个名为 StackOverflow 的应用程序吗?
【问题讨论】:
Django在这里实际上有3个概念:
Project(我认为这就是您所说的站点):这是包含所有应用程序的目录。它们共享一个共同的运行时调用,并且可以相互引用。
应用程序:这是一组视图、模型和模板。应用程序通常经过设计,可以插入到另一个项目中。
站点:您可以根据所访问的站点(即:URL)为应用指定不同的行为。这样,同一个“应用程序”可以根据用户是否访问过“StackOverflow.com”或“RackOverflow.com”(或将调用的任何面向 IT 的版本)进行自我定制,即使它是相同的代码库它正在处理请求。
如何安排这些实际上取决于您的项目。在复杂的情况下,您可能会这样做:
Project: StackOverflowProject
App: Web Version
Site: StackOverflow.com
Site: RackOverflow.com
App: XML API Version
Site: StackOverflow.com
Site: RackOverflow.com
Common non-app settings, libraries, auth, etc
或者,对于想要利用开源插件的更简单的项目:
Project: StackOverflowProject
App: Stackoverflow
(No specific use of the sites feature... it's just one site)
App: Plug-in TinyMCE editor with image upload
(No specific use of the sites feature)
除了需要有一个项目和至少一个应用程序之外,安排非常灵活;您可以根据最适合的方式进行调整,以帮助抽象和管理部署的复杂性(或简单性)。
【讨论】:
项目与应用
项目和应用程序有什么区别?应用程序是做某事的 Web 应用程序——例如,网络日志系统、公共记录数据库或简单的投票应用程序。项目是特定网站的配置和应用程序的集合。一个项目可以包含多个应用程序。一个应用可以在多个项目中。
来自this link:
项目与应用程序
这实际上更像是一个单独的(尽管相关的)问题,但是理解 Django 在“项目”和“应用程序”之间的区别是良好代码布局的重要组成部分。粗略地说,这就是这两个术语的意思:
应用程序试图提供一个单一的、相对独立的相关功能集。允许应用程序定义一组模型(尽管它不是必须)以及定义和注册自定义模板标签和过滤器(尽管它也不是必须)。
项目是应用程序的集合,安装在同一个数据库中,并且都使用同一个设置文件。从某种意义上说,项目的定义方面是它提供了一个设置文件,该文件指定要使用的数据库、要安装的应用程序和其他配置。一个项目可能对应于一个网站,但不是必须的——多个项目可以在同一个网站上运行。该项目还负责根 URL 配置,但在大多数情况下,只包含调用以包含从单个应用程序中提取 URL 配置的调用是有用的。
视图、自定义操纵器、自定义上下文处理器和 Django 允许您创建的大多数其他东西都可以在项目级别或应用程序级别定义,您在哪里执行应该取决于什么对您最有效;不过,一般来说,它们最好放在应用程序中(这增加了它们在项目之间的可移植性)。
【讨论】:
如果你有一个项目,只有一个名为 StackOverflow 的应用程序,答案是肯定的。像这样的网站可能有 20 多个应用程序。
查看 James Bennett 的“DjangoCon 2008: Reusable Apps”视频演示,很好地解释了这一点。
【讨论】:
如您所说,您将拥有一个名为 StackOverflow 的网站,其中包含身份验证应用程序、问题应用程序等。
你应该看看Pinax project 看看他们是如何布置的。这是更好的方法之一,因为它会增加应用程序的模块化和可移植性。
【讨论】: