2012-01-14 43 views
0

是否有可能在django/apache以一種方式部署django應用程序的一部分,另一部分可以部分部署。例如,假設我在www.coolsite.com上爲普通用戶提供了我的界面,但是我想訪問www.coolsite.com上的管理員視圖:1234。這在一個應用程序內是可行的嗎?在不同的端口部署管理界面

另外,是否有可能以不同的方式部署兩個不同的django應用程序(可以說我想在端口80上有一個「web」應用程序,在端口8888上有一個「api」應用程序)?

我知道我可以將應用程序轉移到不同的項目但除非我有(他們分享設置和模型)

謝謝,我不會將它們分割,

回答

1

排序回答您題。

大部分時間我使用3服務器設置 - 開發,分期,生產 - 但有時我必須做生產目錄調試(雖然我真的很討厭這樣做)。當我這樣做時,我經常以8000(或其他)的方式運行Django dev服務器並連接到該服務器。

我有一堆調試的東西,只打印出如果端口在8000..8002。從技術上講,我運行的是完全不同的服務器,但它使用與生產相同的所有設置/數據庫/代碼。我只需在settings.py中設置DEBUG_PRINT值來測試適當的端口範圍。

聽起來這是否會滿足您的需求?

更新:

settings.py,你可以有這樣的事情:

ALLOW_ADMIN = '800' in HOST_PORT 

,然後在urls.py你可以做這樣的事情:

if settings.ALLOW_ADMIN: 
    urlpatterns += patterns((r'^admin/', include(admin.site.urls))) 
else: 
    urlpatterns += patterns((r'^admin/.*', 'views.no_admin')) 

然後您就可以在views.no_admin中對他們大吼,或者給他們一個到其他服務器的鏈接。

+0

好了,其他運行在單獨的服務器/實例可能是一個解決辦法,但我必須弄清楚如何一個端口,而不是其他的塊管理的要求。但我並不是在談論調試,而是在進行維護。我想讓管理員訪問我的客戶的IT人員。 – Goro 2012-01-14 02:00:09

0

我能想到的一個簡單方法就是關注多個項目。如果你的代碼是在一個源代碼版本管理系統中的(爲什麼它不是?),那麼你可以很容易地創建相同分支或標籤的單獨的提取,並以不同的方式提供每個提取,即通過端口80,通過端口8000,一個完全不同的域,等等。

你需要做的唯一事情就是創建特定於pull的urls.py(意味着你可以在你的源代碼版本化系統中忽略它)或者可能找到一種方法來使用像local_urls.py(從未嘗試過)。在每個版本中,您可以打開/關閉您在特定環境中執行或不需要的urlpatterns。只需要端口8000上的管理員?只將該urlpattern放入8000端口的拉式服務器中。

0

下面是另一種不需要多個進程/項目的方法。添加一箇中間件組件是這樣的:

class ProtectAdminMiddleware(object): 
    def process_request(self, request): 
     if request.path.startswith("/admin") and request.META["SERVER_PORT"] != "1234": 
      raise Http404