代码之家  ›  专栏  ›  技术社区  ›  Jiaaro

单个django实例上的“站点框架”

  •  6
  • Jiaaro  · 技术社区  · 16 年前

    我想在一个不同于站点其他部分的子域上提供专门的RSS提要。

    我可以使用站点框架使用不同的url.py和settings.py文件吗 在单个django实例中 . 或者我需要设置两个apache位置,然后在apache配置文件中设置不同的settings.py文件。

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

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

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

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

    Django tupperware

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

    基本的想法是改变 SITE_ID 为每个请求动态设置,并从数据库加载备用设置。它基于域和用途来实现这一点 SITE_ID = 1 默认情况下(当它找不到任何东西时)

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

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

    2 回复  |  直到 14 年前
        1
  •  10
  •   Van Gale    16 年前

    settings.py 对于每个站点。。。因为站点ID是在中定义的 设置.py 是哪个站点处理此请求的关键。

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

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

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

    1. 使用apache+ mod_wsgi 并使用 WSGIApplicationGroup 和/或 WSGIProcessGroup 指令。我以前从未需要过这些,所以不能完全确定它们是否能按您想要的方式工作,但无论如何,您肯定可以在守护程序模式下使用mod_wsgi来大大改善内存占用。

    2. HttpRequest.get_host() 在Django文档中)。因此,即使这会对性能造成轻微的影响,您也可以在所有视图上放置一个装饰器来检查传入的主机。