Mostrando las entradas con la etiqueta Aprender. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Aprender. Mostrar todas las entradas

Aprender Flask

Instalación

Con el siguiente comando desde el terminal:

pip install Flask

Ver la versión de Flask

In [1]:
import flask
flask.__version__
Out[1]:
'0.12.2'

Hola mundo en Flask

Archivo main.py

En el un archivo main.py agregamos

In [ ]:
from flask import Flask
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True, port=5000)

Corremos con:

python main.py

Y listo ya tenemos corriendo nuestra web.

Subir un archivo en Flask

Crear un archivo main.py y en el mismo lugar crear la carpeta de nombre "archivos"

En el archivo main.py :

In [ ]:
import os
from flask import Flask, flash, request, redirect, url_for, send_from_directory
from werkzeug.utils import secure_filename

# en el mismo lugar del archivo main.py crear la carpeta "archivos"
UPLOAD_FOLDER = 'archivos' # /ruta/a/la/carpeta
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',filename=filename))
    return '''
    <!doctype html>
    <title>Subir archivo</title>
    <h1>Subir archivo</h1>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="Upload">
    </form>
    '''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],filename)
                               
if __name__ == "__main__":
 app.run(debug=True, port=5000)

Cambiando el nombre del archivo a mostrar

Se usa:

as_attachment
In [ ]:
@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],filename,
        as_attachment=True,attachment_filename='out.png')

Completo:

In [ ]:
import os
from flask import Flask, flash, request, redirect, url_for, send_from_directory
from werkzeug.utils import secure_filename

# en el mismo lugar del archivo main.py crear la carpeta "archivos"
UPLOAD_FOLDER = 'archivos' # /ruta/a/la/carpeta
ALLOWED_EXTENSIONS = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        
        if 'file' not in request.files:
            flash('No file part')
            return redirect(request.url)
        file = request.files['file']
        
        if file.filename == '':
            flash('No selected file')
            return redirect(request.url)
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
            return redirect(url_for('uploaded_file',filename=filename))
    return '''
    <!doctype html>
    <title>Subir archivo</title>
    <h1>Subir archivo</h1>
    <form method="post" enctype="multipart/form-data">
      <input type="file" name="file">
      <input type="submit" value="Upload">
    </form>
    '''
@app.route('/uploads/<filename>')
def uploaded_file(filename):
    return send_from_directory(app.config['UPLOAD_FOLDER'],filename,
        as_attachment=True,attachment_filename='out.png')
                               
if __name__ == "__main__":
 app.run(debug=True, port=5000)