Plataforma web para cadastro de usuários, login, compra de ingressos e acompanhamento de compras realizadas.
O Openpass é uma aplicação web desenvolvida com Python, Flask e SQLite, criada para simular uma plataforma de compra e gerenciamento de ingressos.
A aplicação permite que usuários realizem cadastro, façam login, visualizem eventos disponíveis, comprem ingressos e acompanhem os ingressos adquiridos.
Além disso, o sistema registra logs das principais ações realizadas pelos usuários, como cadastro, login, compra de ingresso e logout.
O objetivo do Openpass é simular uma plataforma simples de venda de ingressos, permitindo praticar conceitos importantes de desenvolvimento web, como:
- criação de rotas com Flask;
- autenticação básica de usuários;
- controle de sessão;
- integração com banco de dados SQLite;
- cadastro e consulta de dados;
- registro de logs de uso;
- relacionamento entre tabelas;
- compra de ingressos com controle de disponibilidade.
- Página inicial da plataforma.
- Cadastro de novos usuários.
- Login de usuários cadastrados.
- Validação de e-mail já existente.
- Controle de sessão do usuário.
- Listagem de ingressos disponíveis.
- Compra de ingressos.
- Controle de quantidade disponível.
- Histórico de ingressos comprados.
- Registro de logs das ações do usuário.
- Logout com limpeza da sessão.
- Banco de dados SQLite.
- Dados iniciais de eventos cadastrados automaticamente.
- Apresenta o projeto.
- Permite acesso às páginas principais.
- Serve como entrada da aplicação.
- Permite cadastrar um novo usuário.
- Valida se o e-mail já está cadastrado.
- Registra log de cadastro realizado.
- Permite autenticação do usuário.
- Valida e-mail e senha.
- Cria uma sessão para o usuário logado.
- Registra log de login realizado.
- Exibe os ingressos disponíveis.
- Permite selecionar um ingresso.
- Permite escolher a quantidade.
- Verifica se há disponibilidade suficiente.
- Registra a compra no banco.
- Atualiza a quantidade disponível do ingresso.
- Registra log da compra realizada.
- Lista as compras feitas pelo usuário logado.
- Exibe nome do evento, quantidade, preço, data do evento e data da compra.
- Ordena as compras pela data mais recente.
- Registra o logout do usuário.
- Limpa os dados da sessão.
- Redireciona para a página inicial.
| Tecnologia | Finalidade |
|---|---|
| Python | Linguagem principal do projeto |
| Flask | Framework web da aplicação |
| SQLite | Banco de dados local |
| HTML5 | Estrutura das páginas |
| CSS3 | Estilização da interface |
| Jinja2 | Renderização de dados nos templates |
| Pandas | Manipulação de dados |
| Plotly | Visualização de dados |
| Gradio | Interface para análise ou visualização futura |
| OpenPyXL | Manipulação de arquivos Excel |
| Scikit-learn | Possível uso em análise/classificação de dados |
Arquivo principal da aplicação.
Ele contém toda a lógica do sistema, incluindo:
- configuração da aplicação Flask;
- conexão com o banco SQLite;
- cadastro de usuários;
- login;
- controle de sessão;
- compra de ingressos;
- listagem de ingressos comprados;
- logout;
- registro de logs.
Arquivo responsável por criar o banco de dados e as tabelas necessárias para o funcionamento da aplicação.
Ao executar esse arquivo, o banco database.db é criado com as tabelas:
usuarios;ingressos;logs;compras.
Também são inseridos eventos de exemplo para que o sistema já tenha ingressos disponíveis para compra.
Arquivo do banco de dados SQLite.
Ele armazena os dados da aplicação, como usuários, ingressos, compras e logs.
Arquivo com as dependências utilizadas no projeto.
Dependências presentes:
pandas
plotly
gradio
openpyxl
scikit-learn
Como a aplicação principal utiliza Flask, também é necessário instalar:
flask
O projeto utiliza o banco de dados SQLite, salvo no arquivo database.db.
O banco possui quatro tabelas principais:
usuarios;ingressos;compras;logs.
Responsável por armazenar os usuários cadastrados na plataforma.
| Campo | Tipo | Descrição |
|---|---|---|
id |
INTEGER | Identificador único do usuário |
nome |
TEXT | Nome do usuário |
email |
TEXT | E-mail do usuário |
senha |
TEXT | Senha do usuário |
Responsável por armazenar os eventos e ingressos disponíveis.
| Campo | Tipo | Descrição |
|---|---|---|
id |
INTEGER | Identificador único do ingresso |
nome_evento |
TEXT | Nome do evento |
descricao |
TEXT | Descrição do evento |
preco |
REAL | Preço do ingresso |
disponivel |
INTEGER | Quantidade disponível |
data_evento |
TEXT | Data do evento |
Responsável por armazenar as compras realizadas pelos usuários.
| Campo | Tipo | Descrição |
|---|---|---|
id |
INTEGER | Identificador único da compra |
usuario_id |
INTEGER | ID do usuário que realizou a compra |
ingresso_id |
INTEGER | ID do ingresso comprado |
quantidade |
INTEGER | Quantidade comprada |
data_compra |
TEXT | Data e hora da compra |
Responsável por registrar as ações realizadas pelos usuários na plataforma.
| Campo | Tipo | Descrição |
|---|---|---|
id |
INTEGER | Identificador único do log |
usuario_id |
INTEGER | ID do usuário |
nome_usuario |
TEXT | Nome do usuário |
email_usuario |
TEXT | E-mail do usuário |
acao_usuario |
TEXT | Ação realizada |
data_hora |
TEXT | Data e hora da ação |
classification |
TEXT | Campo reservado para classificação/análise |
Ao executar o arquivo criar_banco.py, alguns eventos são cadastrados automaticamente:
| Evento | Descrição | Preço | Disponibilidade | Data |
|---|---|---|---|---|
| Show A | Espetáculo musical com banda ao vivo | R$ 100,00 | 50 | 10/07/2025 |
| Teatro X | Peça premiada com elenco renomado | R$ 80,00 | 40 | 05/08/2025 |
| Festival Z | Festival com atrações nacionais | R$ 120,00 | 60 | 20/09/2025 |
git clone https://github.com/seu-usuario/Openpass.gitcd OpenpassNo Windows:
python -m venv venv
venv\Scripts\activateNo Linux ou macOS:
python3 -m venv venv
source venv/bin/activatepip install flask pandas plotly gradio openpyxl scikit-learnCaso prefira instalar usando o arquivo requirements.txt:
pip install -r requirements.txtSe o Flask não estiver no requirements.txt, instale separadamente:
pip install flaskpython criar_banco.pySe tudo estiver correto, será exibida a mensagem:
Banco de dados criado com sucesso!
python app.pyAbra o navegador e acesse:
http://127.0.0.1:5000
| Rota | Método | Descrição |
|---|---|---|
/ |
GET | Página inicial |
/cadastro |
GET | Exibe a tela de cadastro |
/cadastro |
POST | Cadastra um novo usuário |
/login |
GET | Exibe a tela de login |
/login |
POST | Realiza autenticação do usuário |
/comprar |
GET | Exibe os ingressos disponíveis |
/comprar |
POST | Realiza a compra de ingresso |
/meus-ingressos |
GET | Exibe os ingressos comprados pelo usuário |
/logout |
GET | Encerra a sessão do usuário |
- Acesse a página inicial.
- Clique em cadastro.
- Informe nome, e-mail e senha.
- Faça login com o usuário cadastrado.
- Acesse a tela de compra de ingressos.
- Escolha o evento desejado.
- Informe a quantidade de ingressos.
- Confirme a compra.
- Acesse a tela Meus Ingressos para visualizar suas compras.
- Finalize a sessão usando a opção de logout.
flowchart TD
A[Usuário acessa o Openpass] --> B[Realiza cadastro]
B --> C[Faz login]
C --> D[Acessa a tela de compra]
D --> E[Escolhe evento e quantidade]
E --> F[Sistema verifica disponibilidade]
F --> G{Há ingressos suficientes?}
G -->|Sim| H[Compra é registrada]
G -->|Não| I[Mensagem de quantidade indisponível]
H --> J[Disponibilidade é atualizada]
J --> K[Usuário visualiza em Meus Ingressos]
K --> L[Usuário faz logout]
O sistema registra ações importantes realizadas pelos usuários.
Exemplos de ações registradas:
- cadastro realizado;
- login realizado;
- compra de ingresso;
- logout realizado.
Esses logs podem ser utilizados futuramente para:
- auditoria;
- análise de comportamento;
- geração de relatórios;
- identificação de padrões;
- aplicação de modelos de classificação.
Um usuário deseja comprar ingresso para um festival.
Ele acessa o Openpass, realiza seu cadastro, faz login, escolhe o evento Festival Z, informa a quantidade de ingressos desejada e confirma a compra.
Após a compra, o sistema registra a transação, reduz a quantidade disponível do ingresso e exibe a compra na página Meus Ingressos.
Para que as imagens apareçam corretamente no GitHub, crie a pasta:
docs/images/
Depois coloque seus prints dentro dela com estes nomes:
banner.png
home.png
cadastro.png
login.png
comprar.png
meus-ingressos.png
fluxo.gif
Os caminhos usados no README são:






Caso queira usar outros nomes, basta alterar o caminho da imagem no README.
Algumas melhorias que podem ser implementadas futuramente:
- Criptografia de senha.
- Tela administrativa para gerenciar eventos.
- Cadastro de novos eventos pela interface.
- Edição e exclusão de eventos.
- Cancelamento de compras.
- Geração de QR Code para ingresso.
- Envio de comprovante por e-mail.
- Validação de ingresso na entrada do evento.
- Dashboard com total de vendas.
- Relatório de compras por usuário.
- Relatório de eventos mais vendidos.
- Exportação de dados em Excel.
- Aplicação de IA para análise dos logs.
- Classificação automática de ações suspeitas.
- Hospedagem da aplicação em ambiente online.
- Melhoria na segurança das sessões.
- Utilização de variáveis de ambiente para a chave secreta.
Alguns pontos de segurança importantes para futuras versões:
- Armazenar senhas com hash em vez de texto puro.
- Não deixar a
secret_keyfixa diretamente no código. - Usar variáveis de ambiente para dados sensíveis.
- Validar melhor os dados enviados pelos formulários.
- Proteger rotas restritas.
- Evitar exposição de mensagens técnicas ao usuário final.
- Implementar controle de permissões.
- Usar HTTPS em ambiente de produção.
- O arquivo
database.dbpode ser criado executando o scriptcriar_banco.py. - O sistema utiliza sessões para identificar o usuário logado.
- A compra só é realizada se houver quantidade disponível suficiente.
- Ao realizar uma compra, a quantidade disponível do ingresso é reduzida automaticamente.
- O projeto está configurado para rodar localmente na porta
5000. - Em ambiente de produção, recomenda-se desativar o modo
debug.
Contribuições são bem-vindas.
Para contribuir com o projeto:
-
Faça um fork do repositório.
-
Crie uma branch para sua alteração:
git checkout -b minha-melhoria-
Faça as alterações necessárias.
-
Realize o commit:
git commit -m "Melhoria no projeto"- Envie para o repositório remoto:
git push origin minha-melhoria- Abra um Pull Request.
Projeto desenvolvido por Matheus Soares para fins acadêmicos e de aprendizado, com foco em desenvolvimento web, banco de dados, autenticação de usuários, compra de ingressos e registro de logs.
Este projeto é de uso acadêmico e educacional.