2011-07-12 49 views
3

的問題 - >
假設你有一個名爲「博客」一個Django應用程序,要在「www.cool.com」和「WWW使用.hot.com「這實際上是兩個不同的Django項目,(除了」博客「應用程序的課程)。如何在兩個項目中使用一個django應用程序(帶一個數據庫)? (使用我的應用程序作爲服務)

我想這個「博客」應用程序要像一個服務,可以通過任何第三方網站使用。

你會怎麼做呢?

我認爲其中一個解決方案是在另一個第三域上託管這個「博客」應用程序,並通過API處理讀/寫操作,但這會變得非常麻煩,我想也許有更好的方法。也許我錯過了一些東西。謝謝。

有人糾正我,如果我錯了,但我想我要做的是用我的Django應用程序的服務。

更詳細一點,因爲我覺得我可能還沒有完全清楚,
摘錄下面的評論 - >
我想Django應用程序的代碼庫保持在一個地方,但它應該是可用「n」個項目。
可以加我從雲Django應用程序到我安裝在我的Django settings.py的APPS不知何故?

+0

我不能說我明白你的問題。這聽起來像你有2個網站,一個將成爲「網站服務網站」。這有什麼問題?你是說博客將成爲你數據庫的門戶嗎?你只是想重新使用模型? – Nix

+0

我想爲「n」個網站使用這個「博客」應用程序,所以我想把它作爲一項服務展示出來,任何第三方網站都可以使用它 –

+0

唯一不同的是支持數據庫嗎? – Nix

回答

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'] 
+0

問題不在於數據庫與代碼本身太多有什麼關係呢? –

+0

爲什麼你想要使用2個不同的數據庫? – Nix

+0

像往常一樣寫博客,按照[示例](https://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example)中的建議爲其創建路由器......多數民衆贊成在所有。 @Nix [www.cool.com]的數據存儲在 - X db 中,「www.hot.com」的數據存儲在 - Y db 中,並且您希望獲得「博客」應用程序的數據存儲在 - Z分貝[/報價] – Pill

2

的問題是非常,非常難走。

共享通用應用程序的兩個django網站是微不足道的。它一直都在做。

您只需在兩個站點之間共享應用程序代碼即可。

使用Subversion保持blog應用程序的主副本。

簽出這兩個網站的工作副本。

我想這個「博客」應用程序就像一個服務,可以由任何第三方網站使用。 我想我試圖做的是使用我的Django應用程序作爲服務。

這是小事也。使用Piston在您的博客應用程序周圍創建一個RESTful Web服務。

通過API處理讀取/寫入,但這會變得非常麻煩。

不是。 REST風格的Web服務非常簡單。使用httplib作爲RESTful Web服務的客戶端。

+0

謝謝你的答覆先生,對不起,但請原諒我的無知。我真的不知道顛覆是什麼,但從我猜我可以從一個地方運行_blog_應用程序,我是否正確?那麼我怎麼顛覆它呢? –

+0

活塞看起來很棒!我一定會嘗試一下。 –

+2

@Zach Wild:請訪問http://subversion.tigris.org/並閱讀關於顛覆。另外,看看git,mercurial。 http://git-scm.com/ http://mercurial.selenic.com/這是**每個人**如何確保一個應用程序在兩個站點中正確使用。 –

相關問題