Autenticação e Login com Flask e Django em Python
Neste artigo, você vai aprender:
Conceitos básicos de autenticação
Implementação de login e registro de usuários no Flask
Implementação de login e registro de usuários no Django
Dicas de segurança essenciais
Próximos passos para sistemas mais avançados
Conceitos Básicos de Autenticação
Antes de entrar no código, é importante entender alguns conceitos:
Autenticação: Processo de verificar a identidade do usuário (ex.: login com senha).
Autorização: Controle do que cada usuário pode acessar após a autenticação.
Sessões: Forma de manter o usuário logado durante a navegação.
Hash de senhas: Senhas nunca devem ser armazenadas em texto puro; sempre use hashing seguro (ex.: bcrypt).
Autenticação com Flask
Flask não possui um sistema de autenticação nativo, mas com a extensão Flask-Login, podemos implementar login de forma simples e segura.
1. Instalação
pip install flask flask-login flask-bcrypt flask-wtf
2. Estrutura do Projeto
flask_auth/
│── app.py
│── models.py
│── templates/
│ ├── login.html
│ ├── register.html
│ ├── home.html
3. Criando o Modelo de Usuário (models.py)
from flask_login import UserMixin
from werkzeug.security import generate_password_hash, check_password_hash
class User(UserMixin):
def __init__(self, id, username, password):
self.id = id
self.username = username
self.password_hash = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.password_hash, password)
# Simulando banco de dados
users = {}
4. Configuração do Flask com Flask-Login (app.py)
from flask import Flask, render_template, redirect, url_for, request, flash
from flask_login import LoginManager, login_user, login_required, logout_user, current_user
from models import User, users
app = Flask(__name__)
app.secret_key = "supersecretkey"
login_manager = LoginManager()
login_manager.init_app(app)
login_manager.login_view = "login"
@login_manager.user_loader
def load_user(user_id):
return users.get(int(user_id))
5. Rotas de Registro e Login
@app.route("/register", methods=["GET", "POST"])
def register():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
user_id = len(users) + 1
users[user_id] = User(user_id, username, password)
flash("Usuário registrado com sucesso!")
return redirect(url_for("login"))
return render_template("register.html")
@app.route("/login", methods=["GET", "POST"])
def login():
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
user = next((u for u in users.values() if u.username == username), None)
if user and user.check_password(password):
login_user(user)
return redirect(url_for("home"))
flash("Usuário ou senha incorretos.")
return render_template("login.html")
@app.route("/home")
@login_required
def home():
return render_template("home.html", username=current_user.username)
@app.route("/logout")
@login_required
def logout():
logout_user()
flash("Desconectado com sucesso!")
return redirect(url_for("login"))
if __name__ == "__main__":
app.run(debug=True)
✅ Com isso, você tem um sistema básico de login e registro com Flask.
Autenticação com Django
Diferente do Flask, o Django já vem com um sistema de autenticação completo, incluindo models, views e templates padrão.
1. Configuração do Projeto
django-admin startproject myblog
cd myblog
python manage.py startapp accounts
No settings.py:
INSTALLED_APPS = [
...,
'accounts',
]
2. URLs de Login/Logout (accounts/urls.py)
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
path("login/", auth_views.LoginView.as_view(template_name="login.html"), name="login"),
path("logout/", auth_views.LogoutView.as_view(next_page="/login/"), name="logout"),
path("register/", views.register, name="register"),
]
Inclua em myblog/urls.py:
from django.urls import path, include
urlpatterns = [
path("", include("accounts.urls")),
]
3. View de Registro (accounts/views.py)
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm
from django.contrib import messages
def register(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
messages.success(request, "Conta criada com sucesso!")
return redirect("login")
else:
form = UserCreationForm()
return render(request, "register.html", {"form": form})
4. Templates Básicos
login.html:
<h2>Login</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Login</button>
</form>
<a href="{% url 'register' %}">Criar conta</a>
register.html:
<h2>Registrar</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Registrar</button>
</form>
<a href="{% url 'login' %}">Login</a>
✅ Com isso, você tem um sistema de autenticação seguro e pronto para produção no Django.
Dicas de Segurança
Use HTTPS para proteger dados de login.
Nunca armazene senhas em texto puro (Flask: bcrypt, Django já faz hashing).
Proteja contra ataques de força bruta (limite tentativas de login).
Use tokens CSRF (Django já inclui, Flask-WTF para Flask).
Mantenha bibliotecas atualizadas para evitar vulnerabilidades.
Próximos Passos
Adicionar recuperação de senha e redefinição via e-mail.
Implementar autorização baseada em papéis.
Criar painéis de administração personalizados.
Integrar OAuth2 para login via Google, GitHub ou Facebook.
Conclusão
Autenticação é essencial em qualquer aplicação web.
Com Flask, você tem flexibilidade e aprende a construir tudo do zero.
Com Django, você ganha produtividade e segurança embutida, ideal para aplicações robustas.
💡 Desafio prático: Adicione um recurso de “lembrar-me” e uma página de perfil de usuário em ambos os frameworks.

Comentários
Postar um comentário