Criando uma Aplicação CRUD com Flask, PostgreSQL e Docker
Neste guia, vamos criar uma aplicação básica que acessa um banco de dados PostgreSQL e realiza operações CRUD (Create, Read, Update, Delete). Vamos usar Flask e executar tudo com Docker. Sem estilos ou extras, apenas o essencial.
Estrutura do Projeto
crud-app/
|-- app/
| |-- app.py
| |-- templates/
| | |-- index.html
| | |-- edit.html
|-- Dockerfile
|-- requirements.txt
|-- docker-compose.yml
Passo 1: Dependências
Crie um arquivo requirements.txt
com as seguintes linhas:
Flask==2.2.2
Flask-SQLAlchemy==3.0.2
psycopg2-binary==2.9.3
Werkzeug==2.2.2
Passo 2: Aplicação Flask
Arquivo app/app.py
:
from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# Configuração do banco de dados
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://user:password@db:5432/crud_db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# Modelo
class Item(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
# Criação automática das tabelas
@app.before_first_request
def create_tables():
db.create_all()
@app.route('/')
def index():
items = Item.query.all()
return render_template('index.html', items=items)
@app.route('/edit/<int:id>', methods=['GET', 'POST'])
def edit(id):
item = Item.query.get(id)
if request.method == 'POST':
item.name = request.form['name']
db.session.commit()
return redirect(url_for('index'))
return render_template('edit.html', item=item)
@app.route('/add', methods=['POST'])
def add():
new_item = Item(name=request.form['name'])
db.session.add(new_item)
db.session.commit()
return redirect(url_for('index'))
@app.route('/delete/<int:id>')
def delete(id):
item = Item.query.get(id)
db.session.delete(item)
db.session.commit()
return redirect(url_for('index'))
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Passo 3: Templates HTML
Arquivo app/templates/index.html
:
<!DOCTYPE html>
<html>
<head>
<title>CRUD App</title>
</head>
<body>
<h1>Lista de Itens</h1>
<form action="/add" method="post">
<input type="text" name="name" placeholder="Novo Item" required>
<button type="submit">Adicionar</button>
</form>
<ul>
{% for item in items %}
<li>
{{ item.name }} - <a href="/edit/{{ item.id }}">Editar</a> | <a href="/delete/{{ item.id }}">Excluir</a>
</li>
{% endfor %}
</ul>
</body>
</html>
Arquivo app/templates/edit.html
:
<!DOCTYPE html>
<html>
<head>
<title>Editar Item</title>
</head>
<body>
<h1>Editar Item</h1>
<form action="/edit/{{ item.id }}" method="post">
<input type="text" name="name" value="{{ item.name }}" required>
<button type="submit">Salvar</button>
</form>
<a href="/">Voltar</a>
</body>
</html>
Passo 4: Configurando o Docker
Arquivo Dockerfile
:
FROM python:3.9
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app/app.py"]
Arquivo docker-compose.yml
:
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: crud_db
ports:
- "5432:5432"
Passo 5: Executando o Projeto
-
Suba os contêineres:
docker-compose up --build
-
Acesse a aplicação em http://localhost:5000.
E pronto! Sua aplicação CRUD com Flask, PostgreSQL e Docker está funcionando.
Esse projeto pode ser encontrado aqui.
Comentários
Postar um comentário
Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.