Plataforma de Ensino e Seleção de Cursos com Python (Flask/Django) e Vue.js

  • Backend: Flask (framework Python leve) ou Django (framework Python completo), fornecendo APIs RESTful.
  • Frontend: Vue.js 3 (Composition API), combinado com bibliotecas UI como Element Plus ou Vant.
  • Ferramentas de Desenvolvimento: PyCharm (para backend), VS Code (para frontend).
  • Banco de Dados: MySQL/PostgreSQL, operado através de SQLAlchemy ou Django ORM.
  • Ferramentas Auxiliares: Documentação de API com Swagger, autenticação JWT, notificações em tempo real com WebSocket.

Design dos Módulos Funcionais Principais

Perfis de Usuário

  • Estudantes: Matrícula em cursos, envio de trabalhos, visualização de notas.
  • Professores: Publicação de cursos, atribuição de trrabalhos, correção de atividades.
  • Administradores: Gestão de usuários, gestão de cursos, monitoramento do sistema.

Módulos Funcionais

  • Gestão de Cursos: Operações CRUD, categorização de cursos, busca e filtragem.
  • Sistema de Matrícula: Verificação de conflitos de horário, limite de vagas.
  • Módulo de Trabalhos: Upload de arquivos (armazenamento em OSS), anotações online, lembretes de prazo.
  • Estatísticas de Desempenho: Gráficos visuais (Echarts), exportação de dados para Excel.

Implementação Backend (Exemplo com Flask)

Estrutura do Projeto


app/
├── controllers/  # Camada de rotas
├── models/       # Modelos de dados
├── services/     # Lógica de negócio
├── utils/        # Classes utilitárias (JWT, upload OSS)
└── config.py     # Arquivo de configuração

Exemplo de API RESTful


# API de matrícula em curso
@app.route('/api/matricula/curso', methods=['POST'])
@jwt_required()
def realizar_matricula():
    dados = request.get_json()
    # Lógica de validação de conflitos
    if verificar_conflito(dados['usuario_id'], dados['curso_id']):
        return jsonify({"erro": "Conflito de horário"}), 400
    # Operações no banco de dados
    matricula = Matricula(usuario_id=dados['usuario_id'], curso_id=dados['curso_id'])
    db.session.add(matricula)
    db.session.commit()
    return jsonify({"mensagem": "Matrícula realizada com sucesso"}), 200

Implementação Frontend (Vue 3 + TypeScript)

Design Componentizado

  • CartaoCurso.vue: Componente de cartão de curso, exibindo capa, nome e informações do professor.
  • EnvioTrabalho.vue: Suporte a upload por arrastar e soltar, validação de tipo de arquivo.
  • GraficoDesempenho.vue: Utilização do Echarts para desenhar gráficos de linha/coluna.

Gestão de Estado (Pinia)


// stores/cursoStore.ts
export const useCursoStore = defineStore('curso', {
  state: () => ({
    cursos: [] as Curso[],
    cursosSelecionados: [] as number[],
  }),
  actions: {
    async buscarCursos() {
      const resposta = await api.get('/api/cursos')
      this.cursos = resposta.data
    }
  }
})

Design Chave do Banco de Dados

Tabela de Cursos


CREATE TABLE cursos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  nome VARCHAR(100) NOT NULL,
  professor_id INT REFERENCES usuarios(id),
  max_alunos INT DEFAULT 50,
  horario JSON  -- Armazenamento de horário (ex: {"dia_semana": 2, "hora_inicio": "14:00"})
);

Tabela de Envios de Trabalhos


CREATE TABLE envios_trabalhos (
  id INT AUTO_INCREMENT PRIMARY KEY,
  estudante_id INT REFERENCES usuarios(id),
  trabalho_id INT REFERENCES trabalhos(id),
  url_arquivo VARCHAR(255),
  data_envio TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Deploy e Otimização

Deploy em Contêineres

  • Backend: Imagem Docker empacotando aplicação Flask/Django, execução multiprocesso com Gunicorn.
  • Frontend: Recursos estáticos servidos por Nginx, configuração HTTPS (Let's Encrypt).

Otimização de Desempenho

  • Cache: Redis para dados de cursos populares.
  • Tarefas assíncronas: Celery para operações demoradas como correção de trabalhos.
  • CDN: Distribuição de recursos frontend via CDN da Alibaba/Tencent Cloud.

Sugestões de Funcionalidades Expandidas

  • Interação em Tempo Real: Integração de WebSocket para sala de chat em aula.
  • Testes Automatizados: Pytest (backend), Jest (frontend).
  • Arquitetura de Microsserviços: Divisão do módulo de trabalhos em serviço independente (Flask + gRPC).

Rota Tecnológica de Desenvolvimento

  • Linguagem: Python
  • Framework: flask/django
  • Software: PyCharm/vscode
  • Banco de Dados: mysql
  • Ferramenta de BD: Navicat for mysql
  • Framework Frontend: vue.js
  • Versão MySQL: qualquer versão

Tags: Flask Django Vue.js Python MySQL

Publicado em 8-6 12:08