gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:48:31 25 4
gpt4 key购买 nike

我想在与网站其余部分不同的子域上提供专门的 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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com