2013-07-03 31 views
0

我有兩個Django網絡應用程序使用相同的數據庫和模塊,我的問題是,我希望其中一個網站充當主要網站「A」(例如for安全的身份驗證,因爲只有站點A將在https方案下,請注意,您的「B」位於「A」的子域下,因此不會涉及真正的跨域問題,因爲我在設置文件之間共享密鑰)。Django網站框架,爲敏感的網址創建主從邏輯

到目前爲止,我已經設置了Django站點框架,所以我的主「A」站點配備了自己的設置和URL模塊,就像我的輔助(從站)站點「B」一樣。

現在我將如何繼續實施一種代理從「B」需要HTTPS的網址,而不重複我自己的一次又一次,介意你我使用國際化模式。

所以基本上我需要爲我的應用程序告訴在urls_site_b「登錄」鏈接應代理「登錄」,在urls_site_a,然後成功後返回到站點B(例如使用下一個PARAM)的方式。

我正在考慮一個代理中間件,但是這並沒有解決識別哪個url應該鏈接的部分。我想到了一個持續的設置,它包含一個應該被代理的URL列表。然而編程這需要一些時間,我寧願有一些建議,然後再繼續。

同樣在我的模板中(這是共享的)我會使用{% url %}標籤,這可能是一個問題,因爲標籤不會解析正確的url,因爲它只在屬於當前站點的url模塊。

回答

2

我想你想過於複雜,簡單的裝飾應該做的伎倆(未經測試):

def proxy(view): 
    @wraps(view) 
    def wrapper(request, *args, **kwargs): 
     current_site = get_current_site(request) 
     try: 
      main_site = Site.objects.get(id=1).domain # or set this hard 
     except Site.DoesNotExist: 
      raise Http404 
     if current_site != main_site: 
      return HttpResponseRedirect('http://{0}{1}?next=http://{2}/'.format(
       main_site, request.path, current_site) 
      ) 
     return view(request, *args, **kwargs) 
    return wrapper 

urls_site_b.py

urlpatterns = patterns('', 
    url(r'^foo/$', proxy(bar), name='bar'), 
) 

現在確保urls_site_a.py也有這種模式(顯然你不需要裝飾視圖)。