0

我想要 2 个独立的站点:

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

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

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

提前致谢,

4

1 回答 1

2

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

  • 使用Django 的站点框架:所以两个站点基本上将使用相同的代码运行,使用相同的数据库。内容对象将ForeignKey指向一个Site. 如果您的网站具有完全相同的功能,也许只有不同的设计,这将很有效。如果您必须深入挖掘 Python 代码来自定义一个站点,这可能不是最佳选择。

  • 您可以找到一种解决方案,其中包含用户数据库和每个站点一个数据库,并使用DB 路由器共享用户。这样做的主要缺点是用户数据和其他数据位于不同的数据库中,这意味着您不能对它们执行 JOIN 或类似的操作。(这将非常干净地分离您的数据,无需过滤某些内容是否属于站点)

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

我认为最简单的方法是使用站点框架,但如果一个站点需要更深层次的自定义,这可能会影响另一个站点(例如每个实例的其他数据库模式),这可能会变得很棘手,您应该记住,每个更改也可能会影响另一个站点地点。

要配置此解决方案,您需要为每个站点设置一个单独的设置文件(您至少需要为每个站点设置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如果您在设置中指定它,也可以为每个站点使用不同的。在生产中,您需要运行两个实例,一个具有每个站点的设置,例如。有一个反向代理将请求发送到正确的实例。

于 2014-02-19T13:40:05.713 回答