2010-06-09 19 views
32

Sadece onaylı kullanıcılara görüntüleri güvenli bir şekilde sunmam gerekiyor (örn. Statik dosyalar olarak kullanılamazlar). Şu anda Django projemde aşağıdaki Python görünümüne sahibim, ancak verimsiz görünüyor. Daha iyi bir yol için bir fikrin var mı?Resmi Django'ya yazmanın en iyi yolu HttpResponse()

def secureImage(request,imagePath): 
    response = HttpResponse(mimetype="image/png") 
    img = Image.open(imagePath) 
    img.save(response,'png') 
    return response 

(Görüntü PIL ithal edilmektedir.)

+2

: "Eğer Django 1.7 itibariyle (ı ... yaptığı gibi) Django daha yeni bir sürümü ile bu deneyin, anahtar kelime mimetype (HttpResponse' için CONTENT_TYPE olarak değiştirildi) " – kenorb

cevap

62

Eh, yeniden kodlama, ancak vakaların en basit için (bakir orijinal tutarken yani bir resmin üzerine bir filigran uygulayarak) bazen gereklidir sen kullanabilirsiniz: Santia yorumladığı gibi

try: 
    with open(valid_image, "rb") as f: 
     return HttpResponse(f.read(), content_type="image/jpeg") 
except IOError: 
    red = Image.new('RGBA', (1, 1), (255,0,0,0)) 
    response = HttpResponse(content_type="image/jpeg") 
    red.save(response, "JPEG") 
    return response 
+13

Tanrım, eğer yapabilirsem, sana bir bira alırdım. – Nielsvh

+2

Dosyanın MIME türünü belirlemek için [python-magic] 'i (https://github.com/ahupp/python-magic) kullanabilirsiniz. – Arjan

+14

'mimetype' Django 1.5’de kullanımdan kaldırıldı, [bu seçenek' content_type' olarak adlandırıldı] (https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.__init__) . – bjacobel

İlgili konular