2013-05-13 25 views
0

我有一個django項目正在運行(例如)localhost:8000如何找出圖像是否被加載?

我在這個地址localhost:8000/static/test.jpg有一個圖像。用戶可以通過轉到url來打開此圖像,而不是打開包含頁面。

我想知道這個圖像是否加載到用戶的瀏覽器中(通過加載包含頁面或只是輸入圖像的url),我想獲取請求的請求對象。

我可以在我的視圖中爲該特定圖像提供一種方法嗎?我通過互聯網搜索,但沒有發現任何有用的東西。任何想法或解決方案?

回答

0

我做到了最後。例如我在localjost:8000/media/1.jpg中有一個文件,我想獲得輸入這個url的用戶的ip來加載1.jpg

我在網址中加入了這一行: url(r'^media/(?P<path>.*)$', 'project.views.serve','document_root': settings.MEDIA_ROOT,}),我已經設置了MEDIA_ROOT。然後在project.views.serve我叫django.views.static.serve和我作爲HttpResponse返回的結果。我有一個請求參數在我project.views.serve,我這樣做是爲了從獲取用戶的IP:

x_forwarded_for = request.META.get('HTTP_X_FORWARDED_FOR') 
if x_forwarded_for: 
    ip = x_forwarded_for.split(',')[-1].strip() 
else: 
    ip = request.META.get('REMOTE_ADDR') 
print ip 
+0

是的,這是偉大的。我做到了,它工作。非常感謝 – 2013-05-20 04:21:42

+0

不客氣的兄弟 – Kozet 2013-05-20 04:22:16

0

你說的是禁止盜鏈嗎?使用在Django服務器前運行的Web服務器可以更輕鬆,也更高效地完成此操作。

適用於Apache一些例子只有通過與您的自定義視圖服務您的影像檢查https://wiki.apache.org/httpd/DisableImageHotLinking

+0

不,我不是在說我的朋友。我只是想獲得request.GET當用戶輸入圖像的網址 – Kozet 2013-05-13 10:44:43

0

這可能是。例如,你應該編寫自己的視圖來返回靜態資源,而且你不會使用標準的django靜態處理程序。

0

首先,請注意,在生產環境中提供靜態文件不應該由Django在第一個地點。來自contrib/staticfiles/views.py

用於提供靜態文件的視圖和函數。這些僅在 開發過程中使用,不應在生產環境中使用。

如果你想利用這一點,那麼你可以寫一個custom middleware掛鉤到process_viewprocess_request做你的東西在。

0

你的方式去罰款,但機器人的高流量。在這種情況下,你可以使用XSendFile庫女巫與Apache合作

+0

你是對的,但我不面對高流量;)謝謝你的方式 – Kozet 2013-05-27 06:41:31

相關問題