Sistema web para gerenciamento de treinamentos, turmas e recursos educacionais, com perfis diferenciados para administradores e estudantes.
A Plataforma de Treinamentos é uma aplicação Django que permite:
- Administradores: cadastrar Treinamentos, Turmas, Recursos (vídeos, PDFs, links) e gerenciar matrículas de estudantes
- Estudantes: acessar turmas matriculadas e visualizar recursos conforme regras de acesso baseadas em datas e configurações (acesso prévio, rascunho)
- Backend: Django 5.2.7
- Banco de Dados: MySQL 8.0+
- Frontend: HTML5, Tailwind CSS (via CDN), JavaScript
- Autenticação: Sistema customizado com email/senha
- Upload de Arquivos: Sistema nativo Django com armazenamento local
- Sistema de autenticação customizado (email/senha)
- CRUD completo para Treinamentos, Turmas, Recursos e Usuários
- Regras de acesso a recursos baseadas em data de início da turma
- Player de vídeo HTML5 integrado
- Upload e gerenciamento de arquivos (vídeos, PDFs, etc.)
- Dashboard administrativo com estatísticas
- Área restrita por perfil (Admin/Estudante)
As capturas de tela do sistema estão disponíveis na pasta screenshots/:
Tela de login do sistema - Autenticação por email e senha
Dashboard administrativo com estatísticas gerais (treinamentos, turmas, usuários, matrículas)
CRUD de treinamentos - Listagem, criação, edição e exclusão
CRUD de turmas na área administrativa - Gerenciamento completo de turmas
Dashboard detalhado de uma turma - Visualização de alunos matriculados e recursos, com opções de adicionar/remover alunos
Gerenciamento de recursos da turma - Listagem em cards com opções de criar, editar e excluir
CRUD de usuários/alunos - Listagem com informações de perfil e turmas matriculadas
Listagem de turmas do estudante - Visualização apenas das turmas em que está matriculado
Visualização de recursos pelo estudante - Player de vídeo HTML5 e opções de download
- Python: 3.10 ou superior
- MySQL: 8.0 ou superior (ou MariaDB 10.3+)
- pip: Versão mais recente
- Git: Para clonar o repositório
- MySQL Workbench ou phpMyAdmin: Para importar dump SQL
- Editor de código: VS Code, PyCharm ou similar
- Terminal: PowerShell (Windows) ou Bash (Unix/macOS)
.
├─ apps/
│ ├─ accounts/ # Autenticação e gerenciamento de usuários
│ ├─ classesapp/ # Gerenciamento de turmas
│ ├─ enrollments/ # Sistema de matrículas
│ ├─ resourcesapp/ # Recursos educacionais (vídeos, PDFs, links)
│ └─ trainings/ # Treinamentos e turmas
├─ media/ # Arquivos enviados pelos usuários
│ ├─ videos/ # Vídeos organizados por turma
│ └─ recursos/ # Outros recursos organizados por turma
├─ project/ # Configurações do projeto Django
│ ├─ __pycache__/
│ ├─ __init__.py
│ ├─ asgi.py
│ ├─ settings.py # Configurações (banco de dados, apps, etc.)
│ ├─ urls.py # URLs principais
│ └─ wsgi.py
├─ screenshots/ # Capturas de tela do sistema
├─ templates/ # Templates HTML Django
│ ├─ admin/ # Templates da área administrativa
│ ├─ aluno/ # Templates da área do estudante
│ └─ auth/ # Templates de autenticação
├─ workbench/
│ └─ dumps/ # Dumps SQL para importação
├─ .venv/ # Ambiente virtual Python (ignorar em produção)
└─ manage.py # Script de gerenciamento Django
# Criar ambiente virtual
py -m venv .venv
# Ativar ambiente virtual
.\.venv\Scripts\Activate.ps1
# Atualizar pip
py -m pip install --upgrade pip
# Instalar dependências
pip install -r requirements.txtNota: Se encontrar erro de política de execução, execute primeiro:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser# Criar ambiente virtual
python3 -m venv .venv
# Ativar ambiente virtual
source .venv/bin/activate
# Atualizar pip
pip install --upgrade pip
# Instalar dependências
pip install -r requirements.txtSe o arquivo requirements.txt não existir, crie-o com o seguinte conteúdo:
Django>=5.2.0
mysqlclient>=2.2.0Ou instale diretamente:
pip install Django mysqlclientExecute nesta ordem:
- ✅ Importe o dump SQL:
workbench/dumps/plataformatreinamentos.sql - ✅ Rode as migrações:
python manage.py migrate - ✅ Crie o superusuário:
python manage.py createsuperuser
O projeto utiliza um dump SQL pré-configurado localizado em workbench/dumps/ para popular o banco de dados com dados reais (perfis, usuários, treinamentos, turmas, etc.).
-
Criar o schema no MySQL:
CREATE DATABASE plataformatreinamentos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
Importar o dump SQL:
O arquivo a ser importado é:
workbench/dumps/plataformatreinamentos.sql-
MySQL Workbench:
- Abra o MySQL Workbench
- Conecte-se ao servidor local
- Menu:
Server→Data Import - Selecione
Import from Self-Contained File - Escolha o arquivo
workbench/dumps/plataformatreinamentos.sql - Destination Schema:
plataformatreinamentos - Clique em
Start Import
-
Linha de comando (Windows):
mysql -u root -p plataformatreinamentos < workbench\dumps\plataformatreinamentos.sql
-
Linha de comando (Unix/macOS):
mysql -u root -p plataformatreinamentos < workbench/dumps/plataformatreinamentos.sql
-
-
Verificar importação:
USE plataformatreinamentos; SHOW TABLES;
Você deve ver as tabelas:
perfil,usuario,treinamento,turma,recurso,matricula, entre outras.
O arquivo project/settings.py já está pré-configurado para conexão local. Ajuste as credenciais conforme necessário:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'plataformatreinamentos',
'USER': 'root', # Ajuste se necessário
'PASSWORD': '', # Ajuste conforme sua senha
'HOST': '127.0.0.1',
'PORT': '3306',
'OPTIONS': {
'charset': 'utf8mb4',
'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
},
}
}Importante: Algumas tabelas são gerenciadas fora do Django (models com managed=False). As migrations do Django afetam apenas apps nativos e tabelas onde o ORM gerencia completamente.
Atualmente, as configurações estão diretamente no project/settings.py. Porém é somente para o teste técnico. Para maior segurança em produção, recomenda-se usar variáveis de ambiente.
Após importar o dump SQL, execute as migrações do Django:
Windows (PowerShell):
python manage.py migrateUnix/macOS (Bash):
python3 manage.py migrateImportante: Apenas as tabelas gerenciadas pelo Django serão afetadas. As tabelas principais (usuario, perfil, treinamento, turma, recurso, matricula) já devem estar no banco após importar o dump SQL.
Para acessar o painel administrativo do Django (/admin/), crie um superusuário:
Windows (PowerShell):
python manage.py createsuperuserUnix/macOS (Bash):
python3 manage.py createsuperuserSiga as instruções para informar:
- Username (ou deixe em branco)
- Email (ou deixe em branco)
- Password (será solicitado duas vezes)
Nota: O sistema de autenticação principal usa a tabela usuario customizada (importada do dump). O superusuário criado aqui é apenas para acesso ao Django Admin (/admin/). O login principal do sistema (/login/) utiliza os usuários da tabela usuario importada do dump SQL.
py manage.py collectstatic --noinputpy manage.py runserverO servidor será iniciado em http://127.0.0.1:8000/
- Admin Django:
/admin/- Painel administrativo do Django - Login:
/login/- Tela de autenticação do sistema - Dashboard Admin:
/dashboard/- Dashboard customizado para administradores - Treinamentos:
/treinamentos/- CRUD de treinamentos (admin) - Turmas:
/turmas/- CRUD de turmas (admin) - Usuários:
/usuarios/- CRUD de usuários (admin) - Área do Estudante:
/aluno/turmas/- Listagem de turmas do estudante - Recursos da Turma:
/aluno/turma/{id}/recursos/- Recursos da turma (estudante)
Consulte o arquivo de dump ou a documentação fornecida para credenciais de usuários de teste.
Execute todos os testes:
py manage.py testPara testes específicos de uma app:
py manage.py test apps.accounts
py manage.py test apps.resourcesapp
py manage.py test apps.trainingsOs testes automatizados cobrem:
- Autenticação: Login com email/senha, verificação de perfil
- Regras de Acesso a Recursos:
- Visibilidade antes/depois da data de início
- Filtragem de recursos com acesso prévio
- Exclusão de recursos em rascunho
- Matrículas: Verificação de turmas por estudante
- CRUD de Entidades: Criação, edição e exclusão
- Permissões: Verificação de acesso por perfil (admin/estudante)
- Acesse
/login/ - Faça login com usuário admin:
- Deve redirecionar para
/dashboard/ - Sidebar deve mostrar: Dashboard, Treinamentos, Turmas, Alunos
- Deve redirecionar para
- Faça logout e login com usuário estudante:
- Deve redirecionar para
/aluno/turmas/ - Sidebar deve mostrar apenas: Minhas Turmas
- Deve redirecionar para
- Acesse
/dashboard/como admin - Verifique estatísticas (total de treinamentos, turmas, usuários, matrículas)
- Navegue por:
/treinamentos/- Criar, editar, excluir treinamento/turmas/- Criar, editar, excluir turma (com seleção de treinamento)/usuarios/- Criar, editar, excluir usuário (com validação de senha)- Dashboard de turma (
/turmas/{id}/dashboard/) - Gerenciar alunos e recursos
- Acesse
/aluno/turmas/como estudante - Verifique que aparecem apenas turmas em que o estudante está matriculado
- Clique em "Ver Recursos" de uma turma
Teste 1: Turma Futura (antes da data de início)
- Crie uma turma com data de início futura
- Adicione recursos:
- Recurso A: Acesso prévio = ✅, Draft = ❌
- Recurso B: Acesso prévio = ❌, Draft = ❌
- Recurso C: Acesso prévio = ✅, Draft = ✅
- Como estudante, acesse os recursos da turma
- Resultado esperado: Apenas Recurso A deve aparecer
Teste 2: Turma Iniciada (após data de início)
- Crie uma turma com data de início passada
- Adicione recursos:
- Recurso A: Draft = ❌
- Recurso B: Draft = ✅
- Como estudante, acesse os recursos da turma
- Resultado esperado: Apenas Recurso A deve aparecer
- Acesse recursos de uma turma que contenha vídeo
- Verifique:
- Player HTML5 funcional
- Controles de play/pause funcionando
- Botão "Download do Vídeo" disponível e funcional
- Como admin, crie um novo recurso do tipo "Vídeo" ou "PDF"
- Faça upload de um arquivo
- Verifique que o arquivo foi salvo em
media/videos/turma_{id}/oumedia/recursos/turma_{id}/ - Como estudante, verifique que o recurso está acessível
- Sem estar logado, tente acessar:
/dashboard/→ Deve redirecionar para/login//aluno/turmas/→ Deve redirecionar para/login/
- Como estudante, tente acessar:
/treinamentos/→ Deve redirecionar para/aluno/turmas//turmas/{id}/dashboard/→ Deve redirecionar para/aluno/turmas/
Causa: Credenciais incorretas ou usuário sem permissão.
Solução:
- Verifique
USERePASSWORDemproject/settings.py - Confirme que o usuário MySQL tem permissões no schema
plataformatreinamentos - Teste a conexão:
mysql -u root -p USE plataformatreinamentos;
Causa: Caminho de templates incorreto ou template não encontrado.
Solução:
- Verifique
TEMPLATES[0]['DIRS']emsettings.py:'DIRS': [BASE_DIR / 'templates'],
- Confirme que os templates existem em
templates/ - Verifique o nome do template no código da view
Causa: Tabelas não foram criadas ou dump não foi importado.
Solução:
- Importe o dump SQL de
workbench/dumps/ - Verifique se todas as tabelas foram criadas:
SHOW TABLES;
- Se faltarem tabelas, importe o dump novamente
Causa: App não registrado ou import incorreto.
Solução:
- Verifique
INSTALLED_APPSemsettings.py - Confirme que todos os apps estão listados:
'apps.accounts', 'apps.trainings', 'apps.classesapp', 'apps.resourcesapp', 'apps.enrollments'
- Verifique imports nos arquivos
views.pyeurls.py
Causa: Migrations tentando criar tabelas que já existem ou são managed=False.
Solução:
- Para tabelas
managed=False, não execute migrations - Se necessário, marque migrations como aplicadas:
py manage.py migrate --fake accounts - Execute apenas migrations de apps nativos do Django:
py manage.py migrate auth py manage.py migrate sessions py manage.py migrate admin
Causa: Ambiente virtual não ativado ou dependências não instaladas.
Solução:
- Ative o ambiente virtual:
.\.venv\Scripts\Activate.ps1
- Instale dependências:
pip install -r requirements.txt
Causa: Caminho do arquivo incorreto ou arquivo não existe.
Solução:
- Verifique se o arquivo existe em
media/videos/turma_{id}/ - Confirme que
MEDIA_URLeMEDIA_ROOTestão configurados corretamente - Verifique permissões da pasta
media/ - Teste o caminho direto:
http://127.0.0.1:8000/media/videos/turma_{id}/arquivo.mp4
Causa: Pasta media/ sem permissão ou caminho incorreto.
Solução:
- Crie a estrutura de pastas:
mkdir media\videos mkdir media\recursos
- Verifique permissões de escrita na pasta
media/ - Confirme
MEDIA_ROOTemsettings.pyaponta para o caminho correto
- accounts: Autenticação, usuários, perfis
- trainings: Treinamentos e turmas
- classesapp: Gerenciamento de turmas (admin)
- resourcesapp: Recursos educacionais
- enrollments: Sistema de matrículas
- Models com
managed=Falsepara tabelas existentes no banco - Autenticação customizada via
EmailBackend - Context processors para expor dados globais nos templates
- Services para lógica de negócio (ex:
access_rules.py)