Django Sites Framework 初始设置



我对相当一维的 Django 实现感到满意,但现在试图理解多站点与共享内容的过程。

我已经通读了 Django 站点框架和许多关于该主题的文章,但我没有得到如何启动使用相同数据库的第二个站点的基础知识,但以单独的域名呈现自己。

我有一个非常快乐且按部就班的 django 网站,由一个在项目中运行的应用程序组成。

为了使用教程的说法,我开始了一个项目"mysite">

django-admin.py startproject mysite

然后启动了一个应用程序"民意调查"

manage.py startapp polls

问题 1:网站框架是否假定每个网站都是单独的项目或单独的应用程序?

项目中的第二个应用程序"polls2"似乎是有意义的,但定义SITE_ID settings.py 似乎是整个项目的事情。 有没有办法逐个应用进行设置?

与">

mysite"相邻的第二个项目"mysite2"会给我第二个结构,它有自己的 settings.py 和一个单独的SITE_ID,但似乎严重违反了"DRY"原则,因为我会复制相邻姐妹项目的许多元素。

Q2:听起来我需要将数据库模型 (models.py( 重新定义为多对多关系,以便在站点之间共享数据。这是否只是改变了Django访问这些表的方式,还是需要重建现有站点的数据库?

您对实施网站框架的预期过程的指导将是伟大的,非常感谢。

问题 1:站点框架是否假定每个站点都是一个单独的项目或 一个单独的应用程序?

一个Django网站通常由多个应用程序组成,所以"单个应用程序"的方法并不真正有效。但是,从每个站点的单独项目的角度来考虑也没有帮助。每个站点唯一需要分开的是设置文件。

为每个站点设置单独的设置文件是否违反了 DRY 原则?不一定。您可以(并且应该(创建一个具有通用设置的基本设置文件。然后,将它们导入到每个站点的设置文件中。

例如,在项目目录中,您可以有三个设置文件:

base_settings.py
siteA_settings.py
siteB_settings.py

siteA_settings.pysiteB_settings.py将从base_settings.py导入所有设置。

您唯一需要放入每个站点设置文件中的是具有单个站点 ID 的SITE_ID设置。所有其他设置可以在站点之间共享(base_settings.py(,也可以特定于特定站点(siteA_settings.pysiteB_settings.py(,具体取决于您的个人需求。例如,如果您有单独的每网站模板,则可以在每网站设置中重新定义TEMPLATE_DIRS设置,但如果模板在网站之间共享,则不必这样做。与所有其他设置相同 - url 结构、已安装应用程序列表等。

然后,您只需指定设置文件即可选择要运行的站点。例如,使用 Django 开发服务器:

python manage.py runserver --settings=mysite.siteA_settings

python manage.py runserver --settings=mysite.siteB_settings

Q2:听起来我需要将数据库模型 (models.py( 重新定义为 用于在站点之间共享数据的多对多关系。这样做吗 只需更改 Django 访问这些表的方式,或者将现有的 站点的数据库也需要重建?

只需共享所有对象,就不需要修改仅在站点之间共享的模型。只有在您希望能够控制模型的哪个对象出现在每个站点上的情况下,您才需要通过将关系(多对多或外键,具体取决于您的需要(从模型添加到 Django 的Site模型来考虑这一点。

这样做确实会更改底层数据库结构(因为添加外键需要给定模型的数据库表中有一个额外的列,而添加多对多关系需要一个完整的附加表(。站点框架本身也使用自己的数据库表,因此您需要在启用数据库后同步数据库。

添加关系后,可以轻松地将查询限制为用于当前站点的对象 - 例如,通过使用 CurrentSiteManager。另一方面,您仍然可以使用默认管理器(即访问ORM的通常Model.objects形式(访问所有对象。

最新更新