2010-06-09 5 views
32

Ich muss Bilder sicher nur für validierte Benutzer liefern (d. H. Sie können nicht als statische Dateien bedient werden). Ich habe derzeit die folgende Python-Ansicht in meinem Django-Projekt, aber es scheint ineffizient. Irgendwelche Ideen für einen besseren Weg?Die beste Art, ein Bild in ein Django zu schreiben HttpResponse()

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

(Bild wird von PIL importiert.)

+2

wie Santia kommentierte: „Falls Sie versuchen, diese mit einer neueren Version von Django (so wie ich ...) wie von Django 1.7 wurde das Stichwort MIME-Typ umbenannt content_type für' Httpresponse () '" – kenorb

Antwort

62

Nun, Re-Encoding benötigt manchmal wird (dh ein Wasserzeichen auf ein Bild anwenden, während das Original unangetastet zu halten), aber für den einfachsten Fällen Sie verwenden können:

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

Mein Gott, wenn ich könnte, würde ich dir ein Bier kaufen. – Nielsvh

+2

Um den MIME-Typ der Datei zu ermitteln, können Sie [python-magic] (https://github.com/ahupp/python-magic) verwenden. – Arjan

+14

'mimetype' wurde in Django 1.5 veraltet, [diese Option heißt jetzt 'content_type'] (https://docs.djangoproject.com/en/1.5/ref/request-response/#django.http.HttpResponse.__init__) . – bjacobel

Verwandte Themen