“站点框架”在一个单一的Django实例(“sites framework” on a single

2019-07-28 21:14发布

我想就可以提供从网站的其余部分不同的子域专用的RSS源。

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

我需要设置两个urls.py文件的原因是为了避免重复的内容。 我不想让主站点处可用rss.example.com,我不想专门的饲料是在example.com访问

从单一的Django的情况下为他们提供服务将是理想的,因为我们是在内存有限的共享主机,它似乎像这样的垃圾有一个实例打开,仅提供了RSS。

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

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

解决方案: Django的特百惠

我结束了写在一个单一的Django实例上运行一个网站的多个副本的框架。

其基本思路是改变了SITE_ID上飞为每个请求设置,并从数据库加载交替设置。 为此,它会基于域名并使用SITE_ID = 1默认情况下(当它不能找到任何东西)

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

它工作得很好:)而且它在生产运行处http://rootbuzz.com

Answer 1:

随着股票的Django,你必须有一个独特的settings.py为每个站点......因为SITE_ID被定义settings.py ,是该网站正在处理该请求的关键。

换句话说,SITE_ID是全球性的,以您的实例,因此,你需要一个实例为每个站点。

你可以有一个共同urls.py ,如果你想因为没有什么阻止你使用相同的ROOT_URLCONF中的所有站点settings.py文件...或者你可以有一个diffent为每个站点。 在这种情况下,你会想包括子网址,以免重复自己的任何常见的URL。

至少有两种方法可以尝试从单一实例服务:

  1. 使用Apache + mod_wsgi的 ,并使用WSGIApplicationGroup和/或WSGIProcessGroup指令。 之前,所以不能完全肯定这一定会给你想要的方式,但无论你绝对可以使用mod_wsgi的守护进程方式,极大地提高你的内存占用我从来没有需要这些。

  2. 你可以用Django的中间件扮演拒绝/允许基于请求主机名的URL(见HttpRequest.get_host() Django文档)。 对于这个问题,尽管这将是一个轻微的性能损失,你可以把你所有的意见装饰,检查传入主机。



Answer 2:

仅供参考-我发布的Django dynamicsites它可以帮助这个问题- https://bitbucket.org/uysrc/django-dynamicsites/src



文章来源: “sites framework” on a single django instance