Django多站点用于本地开发,结构和工作流程方面的建议

时间:2014-02-19 11:50:50

标签: django django-sites

我希望有2个独立的网站:

  • 网站需要共享用户(用户可以为任一网站创建内容并登录到任一网站)
  • 网站将分享一些模型(即博客),但没有通过这些模型创建的内容(通过博客模型创建的每个内容只能在1个网站上看到)
  • 网站看起来很不一样,因此内容不会被分享

我仍在本地开发,并且不确定如何定义这两个网站,以便我可以在浏览器中访问每个网站,然后编写网址以将每个网站映射到其单独的模板。

我已检查过多站点文档,但发现很难理解它与我的需求有什么关系。

提前致谢,

1 个答案:

答案 0 :(得分:2)

您有很多可能来解决您的问题 - 共享代码/模型不是最大的问题,因为如果您将它们打包在一些可重复使用的应用程序中,您应该能够在不同的项目中使用它们。

  • 使用Django's Sites framework:因此两个站点基本上都使用相同的代码运行,使用相同的数据库。内容对象将具有ForeignKey pointing to a Site。如果您的网站具有完全相同的功能,可能只有不同的设计,这很有效。如果你不得不深入挖掘Python代码来定制一个站点,那么这可能不是最佳选择。

  • 您可以找到一个包含用户数据库和每个站点一个解决方案的解决方案,并使用DB routers共享用户。这样做的主要缺点是用户数据和其他数据存在于单独的数据库中,这意味着您无法在其上执行JOIN或类似操作。 (这会非常干净地分离您的数据,如果某些内容属于某个网站则无需过滤)

  • 编写自己的authentication backend,以便每个项目都不会根据自己的数据库对用户进行身份验证,而是针对某些外部服务进行身份验证。

我认为最容易的是网站框架,但如果一个网站需要更深层次的自定义可能会影响其他网站(例如每个实例的其他数据库模式),这可能会变得棘手,你应该记住,每个更改也可能影响其他网站。

要配置此解决方案,您需要为每个站点设置一个单独的设置文件(您需要至少为每个站点设置SITE_ID)。此外,您可以为每个站点单独指定其他设置,例如不同的模板文件夹等。

settings
    __init__.py
    base.py
    site_a.py


# site_a.py
from base import *
SITE_ID = 1
# eg different templates for this site
TEMPLATE_DIRS = (('site_a/templates/'),)

然后可以使用manage.py --settings settings.site_a运行开发服务器。 你可以,例如。如果您在设置中指定,也会为每个网站使用不同的urls.py。 在生产中,您需要运行两个实例,一个具有每个站点的设置,例如。有一个反向代理将请求发送到正确的实例。