2016-03-05 76 views
0

我的Django網絡應用程序允許用戶通過HTTPHTTPS連接。我很好奇:有沒有辦法檢測中的url方案settings.py?如果是這樣,怎麼樣?檢測Django應用程序的settings.py中的url方案

+0

你不能在* settings.py *文件中執行它,因爲它只包含常量和變量。它不處理請求。所以,沒辦法檢測URL方案。但是這可以在中間件中完成。 – xyres

+0

是的,這就是我的想法。我正在從第三方存儲桶(Azure)加載一些靜態文件。我希望這些對象的uris爲http請求用戶提供'http',爲https請求用戶提供'https'。那麼我應該使用中間件將正確的方案傳遞給我的'Storage'類嗎? –

+0

是的,如果可以使用中間件來完成,那就去做吧。你所需要做的就是檢查'request.is_secure()'。它對於HTTPS請求是「真」的。雖然這也可以在視圖中完成。 – xyres

回答

1

這不能在settings.py文件中完成,因爲它只包含常量和變量。它不處理請求。但是這可以在中間件中完成。

這裏有一箇中間件在它的查詢URL方案最簡單的形式:

class DetectUrlScheme(object): 
    """ Middleware for detecting URL scheme """ 

    def process_request(self, request): 
     if request.is_secure(): 
      # HTTPS 
      # do something ... 
     else: 
      # HTTP 
      # do something ... 
     return 

雖然,如果你有一對夫婦只的意見,寫一箇中間件似乎是一個開銷。所以,你也可以在你的視圖中檢查URL方案。

def myview(request): 
    if request.is_secure(): 
     # HTTPS 
     # do something ... 
    else: 
     # HTTP 
     # do something ... 
相關問題