2014-10-06 58 views

回答

0

我會當你正在使用切諾基

  1. 刪除與媒體URL爲localhost /媒體直接訪問媒體文件夾中回答我的問題

    /..例如通過刪除它的虛擬主機

  2. 激活(檢查)允許X-Sendfile處理程序選項卡通用CGI選項在處理Django請求的virtuelserver頁面中。

  3. 假設您有用戶圖片在媒體/圖片保護,只有所有用戶可見。 (可以根據需要只是一個爲例進行修改)

每個用戶的圖片存放在媒體/圖片/ pk.jpg(1.JPG,2.JPG ..)

創建視圖:

@login_required(redirect_field_name=None) 
def media_pictures(request,pk): 

    response = HttpResponse() 
    path=os.path.join (settings.MEDIA_ROOT,'pictures',pk+'.jpg') 
    if os.path.isfile(path): 
    #response['Content-Type']="" # add it if it's not working without ^^ 
    response['X-Accel-Redirect'] = path 
    #response['X-Sendfile'] = path # same as previous line, 
    # X-Accel-Redirect is for NGINX and X-Sendfile is for apache , in our case cherokee is compatible with two , use one of them. 

    return response 

    return HttpResponseForbidden() 

切諾基現在照顧服務的文件,這就是爲什麼我們檢查了允許X-SENDFILE,這將不無這裏 路徑變量的工作是將文件的完整路徑,可以在任何地方,只要閱讀由切諾基用戶或組負責4.網址的conf 我們禁用Media文件夾的直接訪問,我們需要提供一個URL從Django中使用以前的觀點

爲爲例,爲了使用戶的圖像與ID爲17無障礙訪問

localhost/media/pictures/17。JPG

url(r"^media/pictures/(?P<pk>\d+)\.jpg$", views.media_pictures,name="media_pictures"), 

這也將努力爲Apache,Nginx的等,只是將服務器配置爲使用X-SENDFILE(或X阿塞爾 - 重定向Nginx的),這可以很容易地在文檔中發現

用這種方法,每一個登錄的用戶可以查看所有用戶的照片,隨時服務於文件之前添加額外的驗證,每用戶檢查等

希望這將幫助別人

0

創建一個Django視圖該文件

    服務器
  • 使用@login_required這一觀點來限制訪問

  • 使用Python標準IO操作

  • 使用從磁盤讀取的文件StreamingHttpResponse所以沒有延遲或內存開銷寫回應

  • 設置響應的MIME類型正確

+0

是否會採用切諾基提供服務的文件這樣?我想使用login_required保護媒體目錄,但應該通過切諾基提供文件,因爲它更高效並推薦用於製作,現在已經爲靜態和媒體導演執行此操作,但目前沒有任何保護 – 2014-10-06 10:38:39

+0

切諾基無法知道HTTP請求是否來自一個有效的登錄用戶或沒有。 – 2014-10-06 10:44:52

+1

如果你想進一步優化輸出,你可以使用X-Send-File' HTTP Response頭。但是這需要來自Web服務器的特殊支持。 https://github.com/johnsensible/django-sendfile - 我建議做最簡單的解決方案,然後再做其他事情,如果你對性能不滿意。 – 2014-10-06 10:46:06

相關問題