6.4. Aplicación CRUD¶
Hacer un demo local de una aplicación Flask CRUD, es decir, una aplicación con las funciones básicas en bases de datos como «Crear, Leer, Actualizar y Borrar».
6.4.1. Requisitos previos¶
Para trabajar una aplicación Flask con bases de datos relacionales requiere instalar las siguientes librerías:
Actualizar repositorios de paquetes disponibles para instalar, con el siguiente comando:
$ sudo apt update
Instalar dependencias mínimas necesarias, con el siguiente comando:
$ sudo apt install python3-dev python3-pip python3-virtualenv git sqlitebrowser
6.4.2. Entorno virtual Python¶
Crear entorno virtual Python en directorio $HOME
con el
siguiente comando:
$ virtualenv --python=/usr/bin/python3 venv
Activarlo entorno virtual Python creado con el siguiente comando:
$ source ~/venv/bin/activate
6.4.3. Instalar paquetes Python¶
Para instalar las dependencias para usar del framework Flask, con el siguiente comando:
$ pip3 install Flask==1.0.2 Flask-SQLAlchemy==2.4.0 SQLAlchemy==1.3.5
6.4.3.1. Estructura de proyecto¶
Crear estructura de proyecto Flask, con el siguiente comando:
$ mkdir -p ~/projects/flask-crud-app/templates && cd $_ && cd ../
Cree modulo Python llamado bookmanager.py
dentro del
directorio ~/projects/flask-crud-app
, con el siguiente comando:
$ nano ~/projects/flask-crud-app/bookmanager.py
Agregue el siguiente contenido al archivo ~/projects/flask-crud-app/bookmanager.py
.
from flask_sqlalchemy import SQLAlchemy
project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "bookdatabase.db"))
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)
class Book(db.Model):
title = db.Column(db.String(80), unique=True, nullable=False, primary_key=True)
def __repr__(self):
return "<Title: {}>".format(self.title)
@app.route("/", methods=["GET", "POST"])
def home():
books = None
if request.form:
try:
book = Book(title=request.form.get("title"))
db.session.add(book)
db.session.commit()
except Exception as e:
print("Failed to add book")
print(e)
books = Book.query.all()
return render_template("home.html", books=books)
@app.route("/update", methods=["POST"])
def update():
try:
newtitle = request.form.get("newtitle")
oldtitle = request.form.get("oldtitle")
book = Book.query.filter_by(title=oldtitle).first()
book.title = newtitle
db.session.commit()
except Exception as e:
print("Couldn't update book title")
print(e)
return redirect("/")
@app.route("/delete", methods=["POST"])
def delete():
title = request.form.get("title")
book = Book.query.filter_by(title=title).first()
db.session.delete(book)
db.session.commit()
return redirect("/")
if __name__ == "__main__":
db.create_all()
app.run(host='0.0.0.0', port=8087, debug=True)
Cree plantilla HTML llamado home.html
dentro del directorio
~/projects/flask-crud-app/templates
, con el siguiente comando:
$ nano ~/projects/flask-crud-app/templates/home.html
Agregue el siguiente contenido al archivo ~/projects/flask-crud-app/templates/home.html
.
<html>
<body>
<h1>Add book</h1>
<form method="POST" action="/">
<input type="text" name="title">
<input type="submit" value="Add">
</form>
<h1>Books</h1>
<table>
{% for book in books %}
<tr>
<td>
{{book.title}}
</td>
<td>
<form method="POST" action="./update" style="display: inline">
<input type="hidden" value="{{book.title}}" name="oldtitle">
<input type="text" value="{{book.title}}" name="newtitle">
<input type="submit" value="Update">
</form>
</td>
<td>
<form method="POST" action="./delete" style="display: inline">
<input type="hidden" value="{{book.title}}" name="title">
<input type="submit" value="Delete">
</form>
</td>
</tr>
{% endfor %}
</table>
</body>
</html>
6.4.3.2. Crear base de datos¶
Crear base de datos SQLite, con los siguientes comando:
$ cd ~/projects/flask-crud-app/
$ python3
>>> from bookmanager import db
>>> db.create_all()
>>> exit()
De esta forma puede ver gráficamente la estructura de la base de datos SQLite, con el siguiente comando:
$ sqlitebrowser bookdatabase.db
Este mostrara el Database Browser para SQLite de la aplicación BookManager, como la siguiente figura:
De esta forma ya tiene creada la base de datos SQLite necesaria para la ejecución de la aplicación BookManager.
6.4.3.3. Ejecutar aplicación Flask¶
Ejecutar aplicación Web Flask, con el siguiente comando:
$ python3 bookmanager.py
Abrir en navegador >>> http://127.0.0.1:8087
Nota
El código ejemplo usado puede encontrarlo en: https://github.com/macagua/example.flask.crud-app
Truco
Usando el articulo «Building a CRUD application with Flask and SQLAlchemy».
Ver también
Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.
¿Cómo puedo ayudar?
¡Mi soporte está aquí para ayudar!
Mi horario de oficina es de lunes a sábado, de 9 AM a 5 PM. GMT-4 - Caracas, Venezuela.
La hora aquí es actualmente 7:35 PM GMT-4.
Mi objetivo es responder a todos los mensajes dentro de un día hábil.