Descargar un archivo usando Flask
 
Aprenderemos, con esta explicación, cómo hacer un enlace descargable para descargar un archivo como archivo adjunto usando la función send_file en Flask.
Descargue un archivo como archivo adjunto con la ayuda de la función send_file en Flask
    
En Flask Framework, podemos hacer un descargador de archivos para descargar todo tipo de archivos como PDF, JPEG, MP3 u otros archivos, pero la lógica permanece constante. Ahora solo necesitamos ir a nuestro editor de texto y crear un archivo simple app.py dentro del mismo directorio donde se encuentra nuestro archivo PNG.
Ahora también necesitamos crear una carpeta de plantillas, y dentro de esta, crearemos un archivo index.html, y eso es todo. Ahora, antes que nada, necesitamos importar la biblioteca Flask.
Solo necesita algunas bibliotecas requeridas y la biblioteca send_file:
from flask import Flask, render_template, send_file
Necesitamos crear una variable app e inicializar la aplicación Flask usando el atributo __name__. Ahora inicializaremos nuestra función principal, y solo necesitamos llamar a la función run dentro de este bloque y pasarle debug igual a True, por lo que reiniciará la aplicación cada vez que hagamos cambios.
app = Flask(__name__)
if __name__ == "__main__":
    app.run(debug=True)
Debemos crear una ruta y una función para cargar el archivo HTML. Para ello, crearemos una ruta home que sea /, y cuando le demos a esta ruta, llamará a una función que sería Main_Page().
Esta función devuelve render_template(); dentro de este, pasaremos el archivo index.html, que cargará la plantilla almacenada dentro del archivo index.html.
@app.route("/")
def Main_Page():
    return render_template("index.html")
Ahora escribiremos una plantilla básica que contendrá el archivo descargado.
Usaremos solo unas pocas etiquetas, la primera será una etiqueta <h2> que contendrá el encabezado, y la segunda es una etiqueta <p> que es una etiqueta de párrafo. Dentro de esta etiqueta, usaremos la etiqueta ancla, y el atributo href será igual a una propiedad que es url_for, y le pasaremos su nombre.
<h2>Downloqad this file</h2>
<p> <a href="{{url_for('Download_File')}}">Download</a></p>
Si ejecutamos esta aplicación y abrimos localhost 5000, nos dirá que no pudo construir una URL para el punto final Download_File.

Esta sintaxis url_for('Download_File') está buscando un archivo de descarga, por lo que solo necesitamos hacer una solicitud de obtención para hacer esto.
Ahora crearemos otra ruta, /download. Y crearemos una función con el mismo nombre que especificamos dentro de la propiedad url_for().
Ahora necesitaremos especificar la ruta del archivo, por lo que crearemos una variable que sería RUTA y almacenaremos la ruta dentro de esta variable.
Devolveremos el archivo usando la función send_file(), que toma dos parámetros. El primero será una ruta, y el segundo será as_attachment igual a True porque queremos hacer un archivo descargable como archivo adjunto.
@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    send_file(PATH, as_attachment=True)
Si guardamos y refrescamos la página, veremos que se convierte en un hipervínculo, y podemos descargar el archivo haciendo clic en este enlace.

Código Python completo:
from flask import Flask, render_template, send_file
app = Flask(__name__)
@app.route("/")
def Main_Page():
    return render_template("index.html")
@app.route("/download")
def Download_File():
    PATH = "Flask-logo.png"
    return send_file(PATH, as_attachment=True)
if __name__ == "__main__":
    app.run(debug=True)
Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.
LinkedIn