Веб-приложение для онлайн-обучения, разработанное с использованием FastAPI (бэкенд) и Vanilla JavaScript SPA (фронтенд). Платформа позволяет создавать и проходить курсы, выполнять задания и тесты.
Статус проекта: В разработке (не завершён)
- FastAPI — веб-фреймворк
- SQLAlchemy (async) — ORM
- asyncpg — асинхронный драйвер PostgreSQL
- python-jose — работа с JWT токенами
- passlib — хеширование паролей
- Vanilla JavaScript — клиентская логика
- HTML/CSS — разметка и стили
- PostgreSQL 15 — основная БД
online_course/
├── app/ # Основная директория приложения
│ ├── api/v1/ # API эндпоинты
│ │ ├── auth.py # Аутентификация
│ │ ├── user.py # Управление пользователем
│ │ ├── admin.py # Админ-функции
│ │ ├── course.py # Управление курсами
│ │ └── task.py # Управление заданиями
│ ├── core/ # Ядро приложения
│ │ ├── exceptions.py # Кастомные исключения
│ │ ├── jwt_utils.py # Утилиты для JWT
│ │ └── token.py # Работа с токенами
│ ├── database/ # Конфигурация БД
│ │ └── db.py # Подключение и создание таблиц
│ ├── dependencies/ # Зависимости FastAPI
│ ├── models/ # Модели SQLAlchemy
│ ├── repositories/ # Слой доступа к данным
│ ├── schemas/ # Pydantic схемы
│ ├── services/ # Бизнес-логика
│ ├── utils/ # Утилиты
│ ├── config.py # Конфигурация
│ └── main.py # Точка входа
├── frontend/ # Фронтенд приложения
│ ├── index.html # Главная HTML страница
│ ├── css/
│ │ └── styles.css # Стили
│ ├── js/
│ │ ├── api.js # API клиент
│ │ ├── app.js # Главное приложение
│ │ ├── auth.js # Управление авторизацией
│ │ ├── components.js # UI компоненты
│ │ └── router.js # Маршрутизация
│ └── TODO.md # TODO фронтенда
├── requirements.txt # Зависимости Python
├── run.py # Запуск приложения
├── TODO.md # Общие задачи
└── docker-compose.yml # Docker Compose конфигурация
| Роль | Возможности |
|---|---|
| student | Просмотр курсов, запись на курсы, выполнение заданий |
| teacher | Создание курсов и заданий |
| admin | Управление пользователями, изменение ролей |
POST /register— Регистрация пользователяPOST /login— Вход в системуPOST /logout— Выход из системыPOST /refresh— Обновление токенов
GET /profile— Получение профиляPATCH /profile— Изменение профиля
GET /users— Список пользователей (с фильтрацией)GET /users/{id}— Профиль пользователяPATCH /users/{id}— Изменение роли пользователя
POST /courses/create— Создание курсаGET /courses— Список курсов (пагинация, фильтрация)GET /courses/{id}— Детали курсаPATCH /courses/{id}— Редактирование курсаPOST /courses/{id}/enroll— Запись на курсDELETE /courses/{id}— Удаление курса
POST /{course_id}/tasks/create— Создание заданияGET /{course_id}/tasks— Список заданий курсаGET /{course_id}/tasks/{id}— Детали заданияDELETE /{course_id}/tasks/{id}— Удаление задания
- Python 3.10+
- PostgreSQL 15
- Docker (опционально)
- Клонировать репозиторий:
git clone <repository_url>
cd online_course- Установить зависимости:
pip install -r requirements.txt- Настроить базу данных (изменить
DATABASE_URLвapp/config.py):
postgresql+asyncpg://user:password@localhost:5432/online_course
- Запустить PostgreSQL через Docker:
docker-compose -f app/docker-compose.yml up -d- Запустить приложение:
python run.py- Открыть в браузере:
http://localhost:8000/frontend/index.html
Проект находится в процессе разработки. Реализованные функции:
- ✅ Аутентификация (JWT токены)
- ✅ Регистрация и вход пользователей
- ✅ Управление курсами (CRUD)
- ✅ Запись на курсы
- ✅ Управление заданиями
- ✅ Профиль пользователя
- ✅ Админ-панель (базовая)
- ✅ Фронтенд SPA
- Написание тестов (включая Mock-тесты)
- Миграции базы данных
- Возможное использование Redis для кэширования
- Расширение функциональности заданий и тестов
Основные настройки находятся в файле app/config.py:
DATABASE_URL = "postgresql+asyncpg://user:password@localhost:5432/online_course"
SECRET = "super-secret"MIT License