2012-08-28 26 views
18

Estoy usando Flask y ejecutando foreman. Los datos que he construido en la memoria y quiero que el usuario pueda descargar estos datos en un archivo de texto. No quiero escribir los datos en un archivo en el disco local y ponerlos a disposición para su descarga.En python usando Flask, ¿cómo puedo escribir un objeto para descargar?

Soy nuevo en python. Pensé que podría crear algún objeto de archivo en la memoria y luego configurar un encabezado de respuesta, tal vez?

Respuesta

28

La transmisión de archivos al cliente sin guardarlos en el disco se trata en la sección "patrón" de los documentos de Flask, específicamente, in the section on streaming. Básicamente, lo que se hace es devolver un pleno derecho Response objeto envolviendo el iterador:

from flask import Response 

# construct your app 

@app.route("/get-file") 
def get_file(): 
    results = generate_file_data() 
    generator = (cell for row in results 
        for cell in row) 

    return Response(generator, 
         mimetype="text/plain", 
         headers={"Content-Disposition": 
            "attachment;filename=test.txt"}) 
+0

Esto me va en la dirección correcta. Gracias Sean! – swidnikk

+1

No tengo idea de qué celda para la fila en los resultados ... está haciendo, ¿puedes explicarlo? – swidnikk

+1

@swidnikk - esa es una expresión de generador - es como la expresión de comprensión de lista '[x para x en el rango (10)]' excepto que produce un objeto generador en lugar de una lista. '(x para x en rango (10))' no genera toda la lista a la vez. En su lugar, evalúa de forma lenta el siguiente valor de 'x' cada vez que se llama' __next__' ('next' en Python 2.X). Los documentos muestran una forma diferente de crear generadores usando 'yield' (' def generator_func(): para x en rango (10): yield x') Las expresiones 'for' anidadas están ahí porque asumí una lista de listas tipo de estructura de datos. ¿Tiene sentido? –

Cuestiones relacionadas