如何在两个项目中使用一个django应用程序(带有一个db)? (使用我的应用程序作为服务)

时间:2011-07-12 11:24:28

标签: python django soa

问题 - >
假设您有一个名为“博客”的django应用,您想在“ www.cool.com ”和“ www.hot.com “这实际上是两个不同的django项目,(除了”博客“应用程序之外)。

我希望这个“博客”应用程序像服务一样,可以被任何第三方网站使用。

你会怎么做呢?

我认为其中一个解决方案是在另一个第三个域上托管这个“博客”应用程序并通过API处理读/写但这会变得非常麻烦,我想也许有更好的方法。也许是我想念的东西。谢谢。

如果我错了,有人会纠正我,但我认为我想要做的就是使用我的 Django App作为服务。

更多细节,因为我觉得我可能还没有完全清楚,
摘录自以下评论 - >
我希望django应用程序的代码库保留在一个地方,但它应该可以被“n”个项目使用。
我可以将云中的django应用程序添加到我的django settings.py的安装应用程序中吗?

2 个答案:

答案 0 :(得分:2)

这个问题非常非常难以理解。

两个共享一个常见应用程序的django网站是微不足道的。它一直都在做。

您只是在两个网站之间共享应用代码。

使用subversion保留blog应用的主副本。

结帐这两个网站的工作副本。

  

我希望这个“博客”应用程序像服务一样,可以被任何第三方网站使用。   我想我要做的就是使用我的Django App作为服务。

这也是微不足道的。使用Piston围绕您的博客应用创建RESTful Web服务。

  

通过API处理读/写,但这会非常麻烦。

不是真的。 RESTful Web服务非常简单。使用httplib作为RESTful Web服务的客户端。

答案 1 :(得分:1)

我认为最简单的解决方案是:
django muliple databases +让我们说,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']