django - "sites framework"在单个 Django 实例上

标签 django apache rss settings sites

我想在与网站其余部分不同的子域上提供专门的 RSS 提要。

我可以使用站点框架来使用不同的 urls.py 和 settings.py 文件 在单个 Django 实例中 .还是我需要设置两个 apache 位置,然后在 apache conf 中设置不同的 settings.py 文件。

我需要设置两个 urls.py 文件的原因是为了避免重复的内容。我不希望在 rss.example.com 上提供主站点,也不希望在 example.com 上访问专门的提要

从单个 django 实例为它们提供服务将是理想的,因为我们在内存有限的共享主机上,而且打开一个仅提供 rss 的实例似乎是一种浪费。

编辑 :我得出的结论是,使用单独的 urls.py 文件的多个实例对我来说是最简单的......但我发现这篇文章描述了如何使用单个实例来做到这一点:

http://effbot.org/zone/django-multihost.htm

解决方案:Django tupperware

我最终编写了一个框架,用于在单个 Django 实例上运行站点的多个副本。

基本思路是改掉SITE_ID为每个请求即时设置并从数据库加载备用设置。它基于域执行此操作并使用 SITE_ID = 1默认情况下(当它找不到任何东西时)

settings.py 文件中的所有设置都作为默认值,这些设置被存储在当前站点的数据库中的设置覆盖。

它工作得很好:) 并且它正在生产中运行 http://rootbuzz.com

最佳答案

使用股票 Django,您必须拥有一个独特的 settings.py对于每个站点...因为 SITE_ID 在 settings.py 中定义是哪个站点处理此请求的关键。

换句话说,SITE_ID 对于您的实例是全局的,因此您需要为每个站点创建一个实例。

你可以有一个共同的urls.py如果您愿意,因为没有什么可以阻止您使用相同的 ROOT_URLCONF在您所有的网站 settings.py文件...或者您可以为每个站点使用不同的文件。在这种情况下,您需要包含子 URL 以防止对任何常见 URL 重复自己。

您至少可以尝试从单个实例提供两种方法:

  • 使用 apache + mod_wsgi并使用 WSGIApplicationGroup和/或 WSGIProcessGroup指令。我以前从未需要过这些,所以不能完全确定它们会按你想要的方式工作,但无论如何你绝对可以在守护进程模式下使用 mod_wsgi 来大大改善你的内存占用。
  • 您可以使用 Django 中间件来根据请求主机名拒绝/允许 URL(请参阅 Django 文档中的 HttpRequest.get_host())。就此而言,即使这会对性能造成轻微影响,您也可以在检查传入主机的所有 View 上放置一个装饰器。
  • 关于django - "sites framework"在单个 Django 实例上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1007017/

    相关文章:

    python - 使用 django REST 进行 LDAP 身份验证

    php - Htaccess : Trigger php or write to log

    php - 我的 Apache 2.4.9(Win32?)上是否禁用了 SSLv3?

    php - 是否有同时适用于 RSS 和 ATOM 的 PHP 提要阅读器?

    android - 在 Android 上使用 Pull Parser 解析 RSS2.0 提要

    css - 有没有办法设置 RSS/ATOM 提要的样式?

    python - python中的目录文件导入错误

    django - 多对多字段上的 order_by 导致查询集中的重复条目

    Django - 更改语言环境的时间格式

    javascript - 配置 htaccess 绕过直接链接到 CSS 和 Javascript 文件