问题 - >
假设您有一个名为“博客”的django应用,您想在“ www.cool.com ”和“ www.hot.com “这实际上是两个不同的django项目,(除了”博客“应用程序之外)。
我希望这个“博客”应用程序像服务一样,可以被任何第三方网站使用。
你会怎么做呢?
我认为其中一个解决方案是在另一个第三个域上托管这个“博客”应用程序并通过API处理读/写但这会变得非常麻烦,我想也许有更好的方法。也许是我想念的东西。谢谢。
如果我错了,有人会纠正我,但我认为我想要做的就是使用我的 Django App作为服务。
更多细节,因为我觉得我可能还没有完全清楚,
摘录自以下评论 - >
我希望django应用程序的代码库保留在一个地方,但它应该可以被“n”个项目使用。
我可以将云中的django应用程序添加到我的django settings.py的安装应用程序中吗?
答案 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']