2011-12-13 16 views
10

Quiero una vista para devolver datos de imagen. así que algo en la línea dedjango: devolver datos de imagen de una vista

return HttpResponse(image_data, mimetype=”image/png”) 

Sé que puede hacer un file.read() para obtener los datos de la imagen, sino porque la imagen es pequeña (como 1x1 píxeles) Quiero simplemente almacenarla como un objeto de cadena (o lo que sea objeto que puedo copiar y pegar en mi código). De esta manera, me ahorro la búsqueda del disco cada vez que se golpea la vista.

¿Cómo puedo hacer esto? Estoy seguro de que esto es fácil, solo que no estoy seguro de qué términos utilizar para la búsqueda.

p.s. Sé que uno normalmente no sirve imágenes de esta manera con Django.

Respuesta

11

Aquí es un ejemplo sencillo de la django-openid project

def logo(request): 
    return HttpResponse(
     OPENID_LOGO_BASE_64.decode('base64'), content_type='image/gif' 
    ) 
    # Logo from http://openid.net/login-bg.gif 
    # Embedded here for convenience; you should serve this as a static file 
    OPENID_LOGO_BASE_64 = """ 
    R0lGODlhEAAQAMQAAO3t7eHh4srKyvz8/P5pDP9rENLS0v/28P/17tXV1dHEvPDw8M3Nzfn5+d3d 
    3f5jA97Syvnv6MfLzcfHx/1mCPx4Kc/S1Pf189C+tP+xgv/k1N3OxfHy9NLV1/39/f///yH5BAAA 
    AAAALAAAAAAQABAAAAVq4CeOZGme6KhlSDoexdO6H0IUR+otwUYRkMDCUwIYJhLFTyGZJACAwQcg 
    EAQ4kVuEE2AIGAOPQQAQwXCfS8KQGAwMjIYIUSi03B7iJ+AcnmclHg4TAh0QDzIpCw4WGBUZeikD 
    Fzk0lpcjIQA7 
    """ 
+0

Si usted está preocupado con el rendimiento, también se puede decodificar la cadena de base 64 una vez cuando se carga el módulo en lugar de cada vez que se solicita: 'OPENID_LOGO = OPENID_LOG_BASE64 .decode ('base64') ' – dkamins

1

Puede considerar el uso de base64. Pero es posible que el aumento en el rendimiento sea casi irrelevante, ya que su imagen se almacenará en la memoria caché del disco. Me interesaría ver los puntos de referencia de la decodificación base64 frente al acceso al disco. Incluso puede encontrar que esta optimización tendría el efecto opuesto.

Editar: Encontré este page on the linux disk cache que puede ser interesante leer al tomar esta decisión. Siempre que la actividad de su disco no sea demasiado alta, las posibilidades de que esta pequeña imagen forme parte de la memoria caché del disco parece probable.

Cuestiones relacionadas