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

  1. 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()
  1. Execute o app:
python app.py
  1. 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.

(Visited 1 times, 1 visits today)