Python 如何在两个项目中使用一个django应用程序(带有一个db)?(将我的应用程序用作服务)
问题->Python 如何在两个项目中使用一个django应用程序(带有一个db)?(将我的应用程序用作服务),python,django,soa,Python,Django,Soa,问题-> 假设您有一个名为“blog”的django应用程序,您想在“www.cool.com”和“www.hot.com”中使用它,这实际上是两个不同的django项目(当然“blog”应用程序除外) 我希望这个“博客”应用程序像一个服务,可以被任何第三方网站使用 你会怎么做? 我想到的解决方案之一是在另一个第三个域上托管这个“博客”应用程序,并通过API处理读/写操作,但这会变得相当麻烦,我想也许有更好的方法。也许我错过了什么。多谢各位 如果我错了,有人会纠正我,但我想我正在尝试使用我的Dj
假设您有一个名为“blog”的django应用程序,您想在“www.cool.com”和“www.hot.com”中使用它,这实际上是两个不同的django项目(当然“blog”应用程序除外) 我希望这个“博客”应用程序像一个服务,可以被任何第三方网站使用 你会怎么做? 我想到的解决方案之一是在另一个第三个域上托管这个“博客”应用程序,并通过API处理读/写操作,但这会变得相当麻烦,我想也许有更好的方法。也许我错过了什么。多谢各位 如果我错了,有人会纠正我,但我想我正在尝试使用我的Django应用程序作为服务。 再详细一点,因为我觉得我可能不太清楚,
以下评论摘录->
我希望django应用程序的代码库保持在一个位置,但它应该可以被“n”个项目使用。
我可以从云端将django应用程序添加到我的django settings.py的已安装应用程序中吗 我认为最简单的解决方案是:
+比如说,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']
这个问题很难理解 两个django站点共享一个公共应用程序是微不足道的。一直都是这样 你只是在两个站点之间共享应用程序代码 使用subversion保留
博客
应用程序的主副本
签出两个站点的工作副本
我希望这个“博客”应用程序像一个服务,可以被任何第三方网站使用。
我想我要做的就是把我的Django应用程序作为一种服务来使用
这也是微不足道的。用于围绕博客应用程序创建RESTful web服务
通过API处理读/写操作,但这会变得相当麻烦
不是真的。RESTful web服务非常简单。使用
httplib
作为RESTful web服务的客户端。我不能说我理解你的问题。听起来你有两个网站,其中一个是“web服务网站”。问题是什么?你是说博客将成为你数据库的门户吗?你只是想重复使用这个模型?我想用这个“博客”应用程序来访问“n”个站点,所以我想把它作为一种服务发布出来,任何第三方站点都可以使用,唯一不同的是后台数据库?让我这样说吧,有一些私有应用程序和数据,它们属于“cool.com”和“hot.com”,还有这个公共应用程序“博客”应用程序,我想把它作为一种服务推出,但我可以与这些“cool.com”和“hot.com”进行后端集成“django项目问题不在于数据库,而在于代码本身……对此有什么建议?为什么要使用两个不同的数据库?像往常一样写博客,按照中的建议为其创建路由器。。。就这些@“www.cool.com”的Nix[quote]数据存储在-X db中,“www.hot.com”的数据存储在-Y db中,您希望“blog”应用程序的数据存储在-Z db中[/quote]对不起,我编辑了那个部分,因为我认为它会引起混乱实际上不知道,我在考虑这样的用例:应用程序处于版本控制之下,源代码包含在这两个项目中(因此您可以以标准方式包含已安装的应用程序中的博客应用程序),当某些内容发生更改时,您只需同步它们。也许还有更聪明的方法,但我现在不知道了。)谢谢你的回答,先生,对不起,请原谅我的无知。我真的不知道什么是颠覆,但我猜我可以从一个地方运行博客应用程序,对吗?那么我该如何颠覆它呢?活塞看起来也很棒!“我一定要试试看。”扎克·怀尔德:请去看看颠覆。另外,看看git和mercurial。这就是每个人如何确保在两个站点中正确使用一个应用程序。