Как я могу использовать одно приложение django (с одним БД) в двух проектах?(Использование моего приложения в качестве службы) - PullRequest
3 голосов
/ 12 июля 2011

Проблема ->
Предположим, у вас есть приложение django под названием " blog ", которое вы хотите использовать в " www.cool.com " и " www.hot.com ". по сути, это будут два разных проекта django (кроме приложения «блог»).

Я хочу, чтобы это приложение для блогов походило на сервис, который может использоваться любым сторонним сайтом.

Как бы вы поступили с этим?

Одним из решений, которое я подумал, было размещение этого «блогового» приложения в другом 3-м домене и обработка операций чтения / записи через API, но это стало бы довольно громоздким, я подумал, может быть, есть лучший способ. Возможно, я чего-то упускаю. Спасибо.

Кто-то исправит меня, если я ошибаюсь, но я думаю, что пытаюсь сделать это - использовать приложение Django в качестве службы.

Немного подробнее, потому что я чувствую, что не совсем ясно,
Выдержки из комментариев ниже ->
Я хочу, чтобы кодовая база приложения django оставалась в одном месте, но она должна использоваться «n» числом проектов.
могу ли я каким-то образом добавить приложение django из облака в мои УСТАНОВЛЕННЫЕ ПРИЛОЖЕНИЯ моего django settings.py?

Ответы [ 2 ]

2 голосов
/ 12 июля 2011

Вопрос очень и очень сложен для понимания.

Два сайта django, которые используют общее приложение, тривиальны.Это делается постоянно.

Вы просто делитесь кодом приложения между двумя сайтами.

Используйте subversion, чтобы сохранить главную копию приложения blog.

Оформить заказ рабочих копий для обоих сайтов.

Я хочу, чтобы это приложение для блогов было похоже на сервис, который может использоваться любым сторонним сайтом.Я думаю, что я пытаюсь сделать, это использовать мое приложение Django в качестве службы.

Это тоже тривиально.Используйте Piston для создания веб-службы RESTful вокруг вашего блога.

обрабатывает чтение / запись через API, но это может быть довольно громоздким.

Не совсем.Веб-сервисы RESTful довольно тривиальны.Используйте httplib, чтобы быть клиентом веб-службы RESTful.

1 голос
/ 12 июля 2011

Я думаю, что самое простое решение будет:
Несколько баз данных django + Допустим, PostgreSQL DB разрешает междоменный доступ.
Создайте роутер для вашего блога и используйте любую нужную вам базу данных.

UPD:

Где-то

# class for routing db operations for  some blog myapp
class MyAppRouter(object):
    """A router to control all database operations on models in
    the myapp application"""

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

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

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

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

в settings.py

DATABASES = {
'default': {
     ...
     # Project DB
           }
# Blog DB
'blog': { 
    'ENGINE': 'django.contrib.gis.db.backends.postgis',
    'NAME': 'test',
    'USER': 'postgres',
    'PASSWORD': 'admin',
    'HOST': '111.111.111.111',
    'PORT': '5432',
    }
}

...
DATABASE_ROUTERS = ['path.to.MyAppRouter', 'path.to.MasterSlaveRouter']
...