Aplicacion Python Flask
Aplicacion Python Flask
El siguiente tutorial crea una aplicación de bucket list con las siguientes funcionalidades: Crear
usuarios, iniciar sesión y crear una lista de bucket.
Introducción
Flask es un framework de Python para crear aplicaciones web. “Flask es un microframework para
Python basado en Wekzeug, Jinja 2 y en buenas intenciones.”
Cuando pensamos en Python, el framework de facto que viene a nuestra mente es el framework
Django. Pero desde una perspectiva de principiantes de Python, Flask es más fácil para comenzar
que en comparación con Django.
Instalando Flask
Instalar Flask es bastante simple y rápido. Con el administrador de paquetes pip todo lo que
necesitamos hacer es:
pip install flask
Una vez que hayas terminado de instalar Flask, crea una carpeta llamada FlaskApp. Navega a la
carpeta FlaskApp y crea un archivo llamado app.py. Importa el módulo flask y crea una aplicación
usando Flask como se muestra;
from flask import Flask
app = Flask(__name__)
Flask busca archivos de plantilla dentro de la carpeta templates. Entonces navega a la carpeta
PythonApp y crea una carpeta llamada templates. Dentro de templates, crea un archivo llamado
index.html. Abre index.html y agrega el siguiente HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Python Flask Bucket List App</title>
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css"
rel="stylesheet">
<link href="http://getbootstrap.com/examples/jumbotron-
narrow/jumbotron-narrow.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="header">
<nav>
<ul class="nav nav-pills pull-right">
<li role="presentation" class="active"><a
href="#">Home</a>
</li>
<li role="presentation"><a href="#">Sign In</a>
</li>
<li role="presentation"><a href="showSignUp">Sign
Up</a>
</li>
</ul>
</nav>
<h3 class="text-muted">Python Flask App</h3>
</div>
<div class="jumbotron">
<h1>Bucket List App</h1>
<p class="lead"></p>
<p><a class="btn btn-lg btn-success" href="showSignUp"
role="button">Sign up today</a>
</p>
</div>
<div class="row marketing">
<div class="col-lg-6">
<h4>Bucket List</h4>
<p>Donec id elit non mi porta gravida at eget metus.
Maecenas faucibus mollis interdum.</p>
<h4>Bucket List</h4>
<p>Morbi leo risus, porta ac consectetur ac, vestibulum
at eros. Cras mattis consectetur purus sit amet fermentum.</p>
<h4>Bucket List</h4>
<p>Maecenas sed diam eget risus varius blandit sit amet
non magna.</p>
</div>
<div class="col-lg-6">
<h4>Bucket List</h4>
<p>Donec id elit non mi porta gravida at eget metus.
Maecenas faucibus mollis interdum.</p>
<h4>Bucket List</h4>
<p>Morbi leo risus, porta ac consectetur ac, vestibulum
at eros. Cras mattis consectetur purus sit amet fermentum.</p>
<h4>Bucket List</h4>
<p>Maecenas sed diam eget risus varius blandit sit amet
non magna.</p>
</div>
</div>
<footer class="footer">
<p>© Company 2015</p>
</footer>
</div>
</body>
</html>
Abre app.py e importa render_template, el cual usaremos para renderizar los archivos de plantilla.
from flask import Flask, render_template
Estaremos usando MySQL como back-end. Así que inicia sesión a MySQL desde la linea de
comandos, o si lo prefieres en una GUI como MySQL work bench, puedes usar eso también.
Primero, crea la base de datos llamada BucketList. Desde la linea de comandos:
mysql -u <username> -p
Ingresa la contraseña requerida y cuando hayas iniciado sesión, ejecuta el siguiente comando y
crea la base de datos:
CREATE DATABASE BucketList;
Una vez que la base de datos ha sido croata, crea una tabla llamada tbl_user como se muestra:
CREATE TABLE `BucketList`.`tbl_user` (
`user_id` BIGINT NULL AUTO_INCREMENT,
`user_name` VARCHAR(45) NULL,
`user_username` VARCHAR(45) NULL,
`user_password` VARCHAR(45) NULL,
PRIMARY KEY (`user_id`));
CREATE TABLE `BucketList`.`tbl_user` (
Estaremos usando Stored procedures para nuestra aplicación de Python para interactuar con la
base de datos MySQL. Así que, una vez que la tabla tbl_user ha sido creada, crea un procedimiento
almacenado llamado sp_createUser para registrar a un usuario.
Cuando se esté creando un procedimiento almacenado para crear un usuario en la tabla tbl_user,
primero necesitamos revisar si un usuario con el mismo username ya existe. Si existe necesitamos
tirar un error al usuario, de lo contrario crearemos el usuario en la tabla de usuario. Aquí está
como el procedimiento almacenado sp_createUser se vería:
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_createUser`(
IN p_name VARCHAR(20),
IN p_username VARCHAR(20),
IN p_password VARCHAR(20)
)
BEGIN
if ( select exists (select 1 from tbl_user where user_username =
p_username) ) THEN
select 'Username Exists !!';
ELSE
insert into tbl_user
(
user_name,
user_username,
user_password
)
values
(
p_name,
p_username,
p_password
);
END IF;
END$$
DELIMITER ;
También agrega el siguiente CSS como signup.css a la carpeta estática dentro de PythonApp.
body {
padding-top: 40px;
padding-bottom: 40px;
}
.form-signin {
max-width: 330px;
padding: 15px;
margin: 0 auto;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin .checkbox {
font-weight: normal;
}
.form-signin .form-control {
position: relative;
height: auto;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2;
}
.form-signin input[type="email"] {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.form-signin input[type="password"] {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}
En app.py agrega otro método llamado showSignUp para renderizar la página de registro una vez
que una solicitud llegue a /showSignUp:
@app.route('/showSignUp')
def showSignUp():
return render_template('signup.html')
Guarda los cambios y reinicia el servidor. Haz clic en el botón Sign Up en la página principal y
deberías de tener la página de registro como se muestra:
Sign Up user page
Enseguida, necesitamos un método del lado del servidor para que la UI interactue con la base de
datos MySQL. Así que navega a PythonApp y abre app.py. Crea un nuevo método llamado signUp y
también agrega una ruta /signUp. Así es como se ve:
@app.route('/signUp')
def signUp():
# create user code will be here !!
Estaremos usando jQuery AJAX para enviar nuestros datos de registro al método signUp, así que
vamos a especificar el método en la definición de la ruta.
@app.route('/signUp',methods=['POST'])
def signUp():
# create user code will be here !!
Para leer los valores enviados necesitamos importar request desde Flask.
from flask import Flask, render_template, request
Usando request podemos leer los valores publicados como se muestra bajo:
@app.route('/signUp',methods=['POST'])
def signUp():
# read the posted values from the UI
_name = request.form['inputName']
_email = request.form['inputEmail']
_password = request.form['inputPassword']
Una vez que los valores son leídos, simplemente vamos a revisar si son válidos y mientras tanto
vamos solo a devolver un mensaje simple:
@app.route('/signUp',methods=['POST'])
def signUp():
# read the posted values from the UI
_name = request.form['inputName']
_email = request.form['inputEmail']
_password = request.form['inputPassword']
# validate the received values
if _name and _email and _password:
return json.dumps({'html':'<span>All fields good !!</span>'})
else:
return json.dumps({'html':'<span>Enter the required
fields</span>'}
También importa json desde Flask, ya que lo estamos usando en el código anterior para devolver
datos json.
from flask import Flask, render_template, json, request
Estaremos usando jQuery AJAX para enviar la solicitud de registro al método de Python. Descarga
y pon jQuery dentro de PythonApp/static/js y agrega un link a él desde la página de registro. Una
vez que jQuery ha sido incluido, vamos a agregar una solicitud POST de jQuery cuando el usuario
haga clic al botón Sign Up.
Guarda todos los cambios y reinicia el servidor. Desde la página Sign Up, llena los detalles y haz clic
en Sign Up. Revisa la consola del navegador y deberías de tener el mensaje de abajo:
{"html": "<span>All fields good !!</span>"}
Advertisement
Una vez que tengamos name, email address y password, podemos simplemente llamar al
procedimiento almacenado MySQL para crear el nuevo usuario.
Para conectarse con MySQL, vamos a estar usando Flask-MySQL, el cual es una extensión de Flask.
Para comenzar con Flask-MySQL, haz la instalación usando el administrador de paquetes pip:
import MySQL
from flask.ext.mysql import MySQL
app = Flask(__name__)
mysql = MySQL()
# MySQL configurations
app.config['MYSQL_DATABASE_USER'] = 'jay'
app.config['MYSQL_DATABASE_PASSWORD'] = 'jay'
app.config['MYSQL_DATABASE_DB'] = 'BucketList'
app.config['MYSQL_DATABASE_HOST'] = 'localhost'
mysql.init_app(app)
Una vez que la conexión es creada, vamos a requerir un cursor para solicitar nuestro
procedimiento almacenado. Usando conexión conn, crea un cursor.
cursor = conn.cursor()
Antes de llamar al procedimiento almacenado para crear usuarios, vamos a salar nuestra
contraseña usando una utilidad proveída por Werkzeug. Importa el módulo dentro de app.py:
_hashed_password = generate_password_hash(_password)
Guarda los cambios y reinicia el servidor. Ve a la página de registro e ingresa el name, email
address y password y haz clic en el botón Sign Up. Al ser exitosa la creación de usuario, serás capaz
de ver un menaje en la consola de tu navegador.
{"message": "User created successfully !"}
https://github.com/jay3dec/PythonFlaskMySQLApp---Part-1
i
https://github.com/jay3dec/PythonFlaskMySQLApp---Part-1