我知道一个网站可以有很多应用,但我看到的所有示例都有一个名为“mysite”的网站。我认为该网站将是您网站的名称,例如StackOverflow。
你会这样做,然后有“身份验证”,“问题”和“搜索”等应用程序吗?或者你真的只有一个名为mysite的网站,有一个名为StackOverflow的应用程序?
答案 0 :(得分:25)
Django实际上有3个概念:
项目(我认为这就是您所谓的网站):这是包含所有应用的目录。它们共享一个公共的运行时调用,可以互相引用。
应用:这是一组视图,模型和模板。应用程序通常设计为可以插入另一个项目。
网站:您可以根据所访问的网站(即:网址)为应用指定不同的行为。这样,相同的“应用程序”可以根据用户是否访问过“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)
除了需要一个项目和至少一个应用程序之外,这种安排非常灵活;但是,您可以适应最适合帮助抽象和管理部署的复杂性(或简单性)。
答案 1 :(得分:8)
项目与应用
项目和应用程序之间有什么区别?应用程序是执行某些操作的Web应用程序 - 例如,Weblog系统,公共记录数据库或简单的轮询应用程序。项目是特定网站的配置和应用程序的集合。项目可以包含多个应用程序。一个应用程序可以在多个项目中。
来自this link:
项目与应用程序
这实际上更像是一个单独的(虽然是相关的)问题,但理解Django在“项目”和“应用程序”之间的区别是良好代码布局的重要组成部分。粗略地说,这就是两个术语的含义:
应用程序尝试提供一组相对独立的相关函数。允许应用程序定义一组模型(虽然它不必),并定义和注册自定义模板标签和过滤器(但同样,它不必)。
项目是应用程序的集合,安装在同一个数据库中,并且都使用相同的设置文件。从某种意义上说,项目的定义方面是它提供了一个设置文件,该文件指定要使用的数据库,要安装的应用程序以及其他配置位。项目可能对应于单个网站,但不必 - 多个项目可以在同一站点上运行。该项目还负责根URL配置,但在大多数情况下,仅包含调用以包含来自个人应用程序的URL配置。
视图,自定义操纵器,自定义上下文处理器以及Django允许您创建的大多数其他内容都可以在项目级别或应用程序级别定义,并且您应该在哪里执行,这取决于对您最有效的内容;但总的来说,它们最适合放在应用程序中(这增加了它们在项目中的可移植性)。
答案 2 :(得分:2)
答案是你有一个名为StackOverflow的应用程序的项目是一个明确的没有。像这样的网站可能有20多个应用。
请参阅James Bennett的“DjangoCon 2008: Reusable Apps”视频演示,该演示文稿很好地解释了这一点。
答案 3 :(得分:0)
正如你所说,你有一个名为StackOverflow的网站,其中包含一个auth应用程序,问题应用程序等。
你应该看看Pinax project,看看他们如何解决问题。这是更好的方法之一,因为它将增加您的应用程序的模块性和可移植性。