Um clone simplificado da plataforma Pinterest, desenvolvido como um projeto de estudo para aplicar conceitos de desenvolvimento web com Python e o framework Flask. A aplicação permite que usuários criem contas, façam login, visualizem um feed de imagens e publiquem suas próprias fotos em seus perfis. Desenvolvido com base no projeto do curso da Hashtag Programação.
- Backend:
- Python: Linguagem de programação principal.
- Flask: Framework web para a construção da aplicação.
- Flask-SQLAlchemy: ORM para interagir com o banco de dados.
- Flask-Login: Gerenciamento de sessões de usuário (login, logout).
- Flask-Bcrypt: Hashing de senhas para segurança.
- Flask-WTF: Criação e validação de formulários.
- Frontend:
- HTML5: Estrutura das páginas.
- CSS3: Estilização.
- Bootstrap: Framework CSS para agilizar o design responsivo.
- Banco de Dados:
- SQLite: Banco de dados relacional leve e baseado em arquivo.
FakePinterest/
├── fakepinterest/
│ ├── __init__.py # Inicializa a aplicação Flask e suas extensões.
│ ├── models.py # Define os modelos do banco de dados (Usuario, Foto).
│ ├── forms.py # Contém os formulários WTForms para login, cadastro e upload.
│ ├── routes.py # Controla as rotas e a lógica de cada página.
│ ├── static/ # Armazena arquivos estáticos (CSS, JS, imagens de layout).
│ │ └── fotos_posts/ # Diretório para as imagens enviadas pelos usuários.
│ └── templates/ # Arquivos HTML com a estrutura das páginas (Jinja2).
├── instance/
│ └── comunidade.db # Arquivo do banco de dados SQLite (gerado automaticamente).
├── criar_banco.py # Script para criar as tabelas no banco de dados.
├── main.py # Ponto de entrada para executar a aplicação.
├── requirements.txt # Lista de dependências do projeto.
└── README.md # Documentação do projeto.
A aplicação segue a arquitetura padrão de um projeto Flask:
main.py: É o ponto de entrada que inicia o servidor de desenvolvimento do Flask.fakepinterest/__init__.py: Cria a instância da aplicação Flask, carrega as configurações (como a chave secreta e o caminho do banco de dados) e inicializa as extensões (SQLAlchemy, Bcrypt, LoginManager).fakepinterest/models.py: Define as tabelasUsuarioeFotocomo classes Python, mapeando-as para o banco de dados.fakepinterest/routes.py: Mapeia as URLs (rotas) para funções Python (views). Essas funções processam as requisições, interagem com o banco de dados através dos modelos e renderizam os templates HTML para o usuário.fakepinterest/forms.py: Define as classes de formulário para garantir a validação e a segurança dos dados enviados pelos usuários (ex: login, cadastro).
- Autenticação de Usuários: Sistema completo de cadastro, login e logout.
- Feed de Fotos: Página inicial que exibe as postagens de todos os usuários.
- Perfil de Usuário: Página de perfil que exibe todas as fotos postadas por um usuário específico.
- Upload de Fotos: Usuários autenticados podem enviar novas imagens para a plataforma.
- Segurança: Senhas armazenadas de forma segura usando hashing.
Siga os passos abaixo para configurar e rodar o projeto localmente.
- Clone o repositório
git clone https://github.com/HassanPls/FakePinterest.git
cd FakePinterest-
Crie e ative um ambiente virtual
# Criar o ambiente python -m venv .venv # Ativar no Windows .venv\Scripts\activate # Ativar no Linux/macOS source .venv/bin/activate
-
Instale as dependências (Certifique-se de que o arquivo
requirements.txtexiste na raiz do projeto)pip install -r requirements.txt
-
Configure a Chave Secreta A aplicação precisa de uma chave secreta para funcionar. Você pode gerar uma nova com o script
secret.pyou usar a que já está no código.python secret.py
Copie a chave gerada e, se desejar, substitua a existente na variável
app.config["SECRET_KEY"]no arquivofakepinterest/__init__.py. -
Crie o Banco de Dados Execute o script
criar_banco.pypara inicializar o banco de dados SQLite e criar as tabelas.python criar_banco.py
Isso criará o arquivo
instance/comunidade.db. -
Inicie a aplicação Com tudo configurado, rode o
main.pypara iniciar o servidor.python main.py
-
Acesse no navegador Abra seu navegador e acesse:
http://127.0.0.1:5000
Contribuições são bem-vindas! Se você encontrar algum problema ou tiver sugestões de melhoria, por favor, abra um issue ou faça um pull request.
Este projeto está licenciado sob a licença MIT.