【问题标题】:Django Sites Framework initial setupDjango 站点框架初始设置
【发布时间】:2013-10-01 11:10:32
【问题描述】:

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

我已经阅读了 Django Sites Framework 和许多关于该主题的帖子,但我没有了解如何启动使用相同数据库的第二个站点的基础知识,但它以单独的域名显示自身。

我有一个非常满意的 django 网站,其中包含一个在项目中运行的应用程序。

按照教程的说法,我开始了一个项目“mysite”

django-admin.py startproject mysite

然后使用

启动应用程序“投票”
manage.py startapp polls

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

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

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

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

您对实施网站框架的预期流程的指导非常好,非常感谢。

【问题讨论】:

    标签: python django frameworks sites


    【解决方案1】:

    Q1:站点框架是否假设每个站点都是一个单独的项目或 一个单独的应用程序?

    一个 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.py, siteB_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 模型。

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

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

    【讨论】:

    • 感谢您的详细回复。澄清一下-当您说“然后您将选择要运行的站点……”时,这种方法是否允许两个站点同时运行?对我来说,这并不是一个真正的目标,两者都需要工作。还在吸收这一切。 Prob 只需要跳进去尝试一下(希望我不要把它搞砸太多:)
    • 当然 - 在开发过程中,您只需同时运行两个 Django 开发服务器实例,每个站点一个。在生产环境中,您将两个单独的规则添加到您的 Web 服务器配置中,每个站点一个。
    猜你喜欢
    • 2016-02-27
    • 2017-03-31
    • 1970-01-01
    • 2012-05-06
    • 2011-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多