Uma aplicação web inspirada no Pinterest desenvolvida em Python utilizando o framework Flask. O projeto conta com sistema de autenticação de usuários, criptografia de senhas, validação de formulários estruturados, feed global dinâmico e upload de imagens associado ao perfil de cada usuário.
- Python 3
- Flask (Framework Web)
- Flask-SQLAlchemy (ORM e Integração com Banco de Dados)
- Flask-Bcrypt (Criptografia de Hashing para Senhas)
- Flask-Login (Gerenciamento de Sessões e Autenticação)
- Flask-WTF & WTForms (Criação e Validação de Formulários com proteção CSRF)
- SQLite (Banco de dados relacional local)
- Bootstrap 5 & Bootstrap Icons (Estilização Front-end)
├── fakepinterest/
│ ├── static/
│ │ ├── css/
│ │ ├── fotos_user/ # Destino dos uploads das postagens
│ │ └── js/
│ ├── templates/ # Templates HTML (Jinja2)
│ │ ├── base.html
│ │ ├── feed.html
│ │ ├── homepage.html
│ │ ├── login.html
│ │ ├── navbar.html
│ │ └── perfil.html
│ ├── __init__.py # Inicialização do app e extensões
│ ├── forms.py # Definição e validações dos formulários
│ ├── models.py # Modelos de dados (Tabelas do Banco)
│ └── routes.py # Definição de rotas e lógica de visualização
├── instance/
│ └── db_pinterest.db # Banco de dados SQLite gerado
├── .gitignore
├── criar_banco.py # Script para criação/reset das tabelas
├── main.py # Ponto de entrada para execução do app
└── segredos.py # Arquivo de credenciais locais (Ignorado no Git)
git clone [https://github.com/luan-rf/AlternativePinterest.git](https://github.com/luan-rf/AlternativePinterest.git)
cd AlternativePinterest
# Criação do ambiente virtual
python -m venv .venv
# Ativação do ambiente (Windows)
.venv\Scripts\activate
# Ativação do ambiente (Linux/macOS)
source .venv/bin/activate
Instale as bibliotecas necessárias para o funcionamento do ecossistema Flask:
pip install flask flask-sqlalchemy flask-bcrypt flask-login flask-wtf email-validator
Crie um arquivo chamado segredos.py na raiz do projeto para armazenar chaves de segurança necessárias para a criptografia e tokens CSRF:
# segredos.py
senha_init = "sua_chave_secreta_aqui"Nota: Este arquivo está listado no .gitignore e não deve ser commitado publicamente por motivos de segurança.
Execute o script utilitário para criar o arquivo SQLite e estruturar as tabelas Usuario e Post:
python criar_banco.py
Inicie o servidor de desenvolvimento local do Flask:
python main.py
O servidor estará disponível no endereço: http://127.0.0.1:5000
- Proteção CSRF: Todos os formulários renderizados via WTForms implementam tokens de validação para mitigar ataques de falsificação de solicitação entre sites.
- Criptografia de Senhas: As credenciais dos usuários passam por hashing seguro (
generate_password_hash) antes do armazenamento persistente. - Upload Seguro: O processamento de arquivos externos valida o nome do arquivo através da função
secure_filenamedo Werkzeug para evitar falhas de travessia de diretório. - Restrição de Acesso: Rotas críticas como
/feede/perfilexigem autenticação explícita por meio do decorador@login_required.