Python 将Django CMS集成到当前的Django项目中,但使用两个分开的数据库
我有一个已经运行的Django项目:foo_proj,我将Django cms集成到这个项目中,因此一些页面包含由Django cms管理的“内容”,这已经起作用了 然而,他们使用的是同一个数据库:foo_db,即:Python 将Django CMS集成到当前的Django项目中,但使用两个分开的数据库,python,mysql,django,Python,Mysql,Django,我有一个已经运行的Django项目:foo_proj,我将Django cms集成到这个项目中,因此一些页面包含由Django cms管理的“内容”,这已经起作用了 然而,他们使用的是同一个数据库:foo_db,即: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'foo_db', 'USER': 'root', 'PASSWORD': 'SecRete!',
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'foo_db',
'USER': 'root',
'PASSWORD': 'SecRete!',
'HOST': '',
'PORT': '',
}
}
我不确定是否可以将他们分开,这样他们的身份验证/授权就完全分开了,用户可以在foo_proj上注册,但他们不能登录到“/cms”,这样我就可以控制对“/cms”拥有编辑权限的有限用户帐户
我尝试使用Django,代码如下:
from django.conf import settings
class foo_projDBRouter(object):
def is_cms_app(self, app_label):
return app_label in ['cms', 'reversion']
def db_for_read(self, model, **hints):
if self.is_cms_app(model._meta.app_label):
return 'cms'
else:
return 'foo_proj'
def db_for_write(self, model, **hints):
if self.is_cms_app(model._meta.app_label):
return 'cms'
else:
return 'foo_proj'
def allow_relation(self, obj1, obj2, **hints):
if not self.is_cms_app(model._meta.app_label):
return True
return None
def allow_migrate(self, db, model):
return True
在我的设置中:
DATABASE_ROUTERS = ['foo_proj.db_route.FooProjDBRouter']
DATABASES = {
'default': {},
'foo_proj': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'adsk_foo_proj',
'USER': 'root',
'PASSWORD': 'Secret!',
'HOST': '',
'PORT': '',
},
'cms': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cms',
'USER': 'root',
'PASSWORD': 'Secret!',
'HOST': '',
'PORT': '',
}
}
我没有让它为我工作,我怀疑这是否会起作用?有什么建议吗
目标是分离my foo_proj和django cms的DBs,但在用户导航到foo_proj中的页面时动态呈现cms内容
实际上,在官方文档页面:,它提到:“为了有效地使用django CMS,我们建议:为django CMS创建一个单独的数据库。”,但似乎没有关于如何分离数据库的进一步详细信息。数据库配置中有一个问题,以下是必需的。(见#必选)
您的
allow\u关系
方法调用了未定义的model
。您可以改用这个(来自Django):
这是一个粗心的错误,我只是加了回去。。。我仍然得到错误:django.core.exceptions.impropertlyconfigured:settings.DATABASES配置不正确。请提供发动机值。有关详细信息,请查看设置文档。
DATABASES = {
'default': {}, # REQUIRED
'foo_proj': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'adsk_foo_proj',
'USER': 'root',
'PASSWORD': 'Secret!',
'HOST': '',
'PORT': '',
},
'cms': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'cms',
'USER': 'root',
'PASSWORD': 'Secret!',
'HOST': '',
'PORT': '',
}
}
def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if a model in the auth app is involved.
"""
if obj1._meta.app_label == 'auth' or \
obj2._meta.app_label == 'auth':
return True
return None