python - Django Sites Framework 初始设置

标签 python django frameworks sites

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

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

我有一个非常快乐且符合规范的 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 访问这些表的方式,还是现有站点的数据库也需要重建?

非常感谢您对实现站点框架的预期过程的指导。

最佳答案

Q1: Does the Sites Framework assume each site is a separate project or a separate app?

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: Sounds like I'll need to redefine database models (models.py) into a many-to-many relationships for sharing data between sites. Does that just change the way Django accesses those tables, or will the existing site's database need to be rebuilt as well?

只要共享所有对象,就不需要修改站点之间共享的模型。只有在您希望能够控制模型的哪个对象出现在每个站点上的情况下,您才需要通过添加从模型到Django 的 Site 模型。

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

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

关于python - Django Sites Framework 初始设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19012044/

相关文章:

python - 使用多处理控制 Python 中的进程数

python - 如何从 dict 获取值列表?

python - django.core.exceptions.ImproperlyConfigured : Error loading MySQLdb module: No module named MySQLdb

ios - 如何将 Cocoapod 导入 App Extension?

PHP exec 命令运行 python 脚本但不运行 python3

python - osx下打开的子进程

javascript - 在 Django 中使用 javascript 获取 anchor 元素 ID

python - 使用 Django 内置表单上传图像

java - 我可以为我的 Java Enterprise 项目使用多个框架吗?

C++ 网络服务框架