【问题标题】:Django multisites for local development, advice on structure and workflow用于本地开发的 Django 多站点,关于结构和工作流程的建议
【发布时间】:2014-02-19 11:50:50
【问题描述】:

我想拥有 2 个独立的网站:

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

我仍在本地开发,不确定如何定义这两个站点,以便我可以在浏览器中访问每个站点,然后编写 url 以将每个站点映射到各自的模板。

我查看了多站点文档,但发现很难理解它与我的需求之间的关系。

提前致谢,

【问题讨论】:

标签: django django-sites


【解决方案1】:

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

  • 使用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。 在生产中,您需要运行两个实例,一个具有每个站点的设置,例如。有一个反向代理将请求发送到正确的实例。

【讨论】:

  • 您好,感谢您的评论,我对如何实际设置它更感兴趣。例如 urls.conf - 如何将每个站点映射到正确的模板,存储差异模板的位置,我是否创建 2x settings.py 文件。
猜你喜欢
  • 2023-03-25
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多