每个django站点的不同数据库 [英] Different database for each django site

查看:142
本文介绍了每个django站点的不同数据库的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

假设我们在同一个django实例上运行多个站点(使用站点框架的Django)。

Suppose we have multiple sites (using sites-framework of Django) running on the same django instance.

MyModel.objects.filter site_id = request.site,slug = slug)[0] 将来可能是一个开销。所以我想知道我是否可以拆分这个模型的数据库以便更快的查询。

MyModel.objects.filter(site_id=request.site, slug=slug)[0] might be an overhead in the future. So I was wondering if I could split the databases for this model(s) for querying faster.

所以如果 request.site 是1,运行

MyModel.objects.get(slug=slug)

只会查询db1。

如果 request.site 是2,运行

MyModel.objects.get(slug=slug)

只会查询db2。

我将获得请求。从站点视图的请求参数中的站点将根据所使用的子域动态确定:de,fr等。

I will be getting request.site from the request parameter of the view as value of site will be dynamically determined according to the subdomain used: de, fr, etc.

推荐答案

您可以创建一个自定义路由器来执行此操作:

You may create a custom router to do this:

示例:

def get_current_site():
   SITE_ID = getattr(settings, 'SITE_ID', 1)
   site_name = Site.objects.get(id=SITE_ID)
   return site_name


DATABASE_ROUTERS = ['CustomDatabaseRouter',] #a setting that Django understands.

class CustomDatabaseRouter(object):

  def db_for_read(self, model, **hints):
     site_name = get_current_site()
     if site_name  in ['site1']:
         return 'db1'
     if site_name in ['site2']:
        return 'db2'
     return 'default'

  def db_for_write(self, model, **hints):
     site_name = get_current_site()
     if site_name  in ['site1']:
         return 'db1'
     if site_name in ['site2']:
        return 'db2'
     return 'default'

  def allow_syncdb(self, model, **hints):
     site_name = get_current_site()
     if site_name in ['site1'] and db == 'db1':
         return True
     if site_name in ['site2'] and db == 'db2':
        return True
     return False

您可以在这里阅读更多
https://docs.djangoproject.com/en/dev/topics/db/multi-db/

You can readup more here https://docs.djangoproject.com/en/dev/topics/db/multi-db/

这篇关于每个django站点的不同数据库的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆