Quando falamos em aplicações web, chega uma hora em que precisamos separar o joio do trigo – ou seja, quem pode acessar o quê. É aí que entra o sistema de login e autenticação.
Nesta parte, vamos ensinar a criar um sistema simples de login com o Flask. Bora proteger sua aplicação? 🛡️
🔐 Por que autenticar usuários?
Imagine seu app como uma festa. Sem convite ou lista de presença, qualquer um entra, bagunça, muda os móveis de lugar e ainda leva o bolo. 🎂
Com autenticação, você cria uma porta com controle – só entra quem tem acesso.
📦 Instalando as ferramentas certas
Vamos usar uma biblioteca muito prática: Flask-Login.
pip install flask flask_sqlalchemy flask_login
📁 Estrutura básica do projeto
Organize os arquivos assim:
meuapp/
├── app.py
├── models.py
├── templates/
│ ├── login.html
│ └── home.html
🧱 Criando o modelo do usuário – models.py
from flask_sqlalchemy import SQLAlchemy
from flask_login import UserMixin
db = SQLAlchemy()
class Usuario(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
nome = db.Column(db.String(150), nullable=False)
email = db.Column(db.String(150), unique=True, nullable=False)
senha = db.Column(db.String(150), nullable=False)
⚙️ Configurando o app – app.py
from flask import Flask, render_template, redirect, url_for, request
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, login_user, login_required, logout_user, current_user
from models import db, Usuario
app = Flask(__name__)
app.config["SECRET_KEY"] = "minhachavesecreta"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///usuarios.db"
db.init_app(app)
login_manager = LoginManager()
login_manager.login_view = "login"
login_manager.init_app(app)
@login_manager.user_loader
def load_user(user_id):
return Usuario.query.get(int(user_id))
with app.app_context():
db.create_all()
🔓 Criando a rota de login
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
email = request.form["email"]
senha = request.form["senha"]
usuario = Usuario.query.filter_by(email=email).first()
if usuario and usuario.senha == senha:
login_user(usuario)
return redirect(url_for("home"))
else:
return "Login inválido!"
return render_template("login.html")
🏠 Rota protegida com login
@app.route("/home")
@login_required
def home():
return f"Bem-vindo, {current_user.nome}!"
🔚 Logout
@app.route("/logout")
@login_required
def logout():
logout_user()
return redirect(url_for("login"))
📄 Template simples de login – templates/login.html
<form method="POST">
<input type="text" name="email" placeholder="Email">
<input type="password" name="senha" placeholder="Senha">
<button type="submit">Entrar</button>
</form>
🚪 Testando tudo
- Crie um usuário manualmente pelo terminal Python:
from app import db, Usuario
novo = Usuario(nome="Maria", email="maria@email.com", senha="1234")
db.session.add(novo)
db.session.commit()
- Execute o app:
python app.py
- Acesse
http://localhost:5000/login
e use o email/senha.
🎉 Se tudo der certo, você verá a mensagem de boas-vindas com o nome do usuário logado!
🔒 Segurança: uma nota importante
⚠️ Neste exemplo, a senha está sendo salva em texto puro (não faça isso em produção!).
No próximo capítulo, vamos aprender a usar hashes de senha com a biblioteca Werkzeug.
📚 Referências para aprofundamento
✨ Curtiu? Compartilhe com quem está aprendendo Python também!
Na próxima parte, vamos melhorar esse sistema de login com hash de senhas, cadastro de novos usuários e proteção contra erros comuns.