-3

データベースでdjangoプロジェクトを実行しているxyz.comという名前のドメインがあります。別のデータベースで xyz.com/pray を指す必要がある別の Django プロジェクトがあります。そうすることは可能ですか?

4

1 に答える 1

2

はい、私が見る2つのこと:

  1. アプリケーションの 1 つの db ルーター
  2. 各アプリの urls.py ファイル

プロジェクト/urls.py:

urlpatterns = patterns('',
    ...
    url(r'^pray/', include('prayapp.urls')), # all of this apps ulrs start with /pray
    url(r'^', include('otherapp.urls')), # all of these urls start at the root /
    ...
)

およびhttps://docs.djangoproject.com/en/1.3/topics/db/multi-db/#an-exampleから:

デシベル設定:

DATABASES = {
# for the rest of your project
'default': {
    'NAME': 'app_data',
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'USER': 'postgres_user',
    'PASSWORD': 's3krit'
},
# for your prayapp
'other': {
    'NAME': 'user_data',
    'ENGINE': 'django.db.backends.mysql',
    'USER': 'mysql_user',
    'PASSWORD': 'priv4te'
}
}

カスタム ルーター:

class PrayAppRouter(object):
    """A router to control all database operations on models in
    the prayapp application"""

    def db_for_read(self, model, **hints):
        "Point all operations on prayapp models to 'other'"
        if model._meta.app_label == 'prayapp':
            return 'other'
        return None

    def db_for_write(self, model, **hints):
        "Point all operations on prayapp models to 'other'"
        if model._meta.app_label == 'prayapp':
            return 'other'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        "Allow any relation if a model in prayapp is involved"
        if obj1._meta.app_label == 'prayapp' or obj2._meta.app_label == 'prayapp':
            return True
        return None

    def allow_syncdb(self, db, model):
        "Make sure the prayapp app only appears on the 'other' db"
        if db == 'other':
            return model._meta.app_label == 'prayapp'
        elif model._meta.app_label == 'prayapp':
            return False
        return None

これを settings.py に追加します

DATABASE_ROUTERS = ['path.to.PrayAppRouter',]
于 2012-06-25T19:26:27.157 に答える