A Django-based web application designed for managing and participating in DataTalks.Club courses. This platform allows instructors to create and manage courses, assignments, and peer reviews.
Students can enroll in courses, submit homework, projects and engage in peer evaluations.
- User Authentication: Registration and login functionality for students and instructors.
- Course Management: Instructors can create and manage courses.
- Homework and Projects: Students can submit homework and projects; instructors can manage assignments.
- Peer Reviews: Facilitates peer review process for project evaluations.
- Leaderboard: Displays student rankings based on performance in courses.
├── accounts/ # Handles user accounts and authentication
├── course_management/ # Main project folder with settings and root configurations
├── courses/ # Main logic is here (courses, homeworks, etc)
├── templates/ # Global templates directory for the project
This project uses uv for dependency management and requires Python 3.13.
Install uv if you don't have it yet:
pip install uvInstall Python 3.13 and dependencies:
uv python install 3.13
uv sync --devSet the database to local:
export DATABASE_URL="sqlite:///db/db.sqlite3"Make migrations:
make migrations
# uv run python manage.py migrateAdd an admin user:
make admin
# uv run python manage.py createsuperuserAdd some data:
make datamake run
# uv run python manage.py runserver 0.0.0.0:8000Best option - run it with docker-compose:
docker-compose up --buildIt will also use Postgres instead of SQLite.
Without Compose - first, build it:
docker build -t course_management .Run it:
DBDIR=`cygpath -w ${PWD}/db`
docker run -it --rm \
-p 8000:80 \
--name course_management \
-e DATABASE_URL="sqlite:////data/db.sqlite3" \
-e SITE_ID="${SITE_ID}" \
-v ${DBDIR}:/data \
course_managementremove the container later
docker rm course_managementget to the container
docker exec -it course_management bashThere are /data endpoints for getting the data
Using them:
TOKEN="TEST_TOKEN"
HOST="http://localhost:8000"
COURSE="fake-course"
HOMEWORK="hw1"
curl \
-H "Authorization: ${TOKEN}" \
"${HOST}/data/${COURSE}/homework/${HOMEWORK}"Make sure to run make data to create the admin user and
data (including authentication token)
If you want to authenticate with OAuth locally (not requeired for testing), do the following
- Go to the admin panel (http://localhost:8000/admin)
- Add a record to "Sites"
- "localhost:8000" for display and domain names
- note the ID of the site (probably it's "2")
- Add records to "Social applications":
- GoogleDTC. Provider: Google
- Ask Alexey for the keys. Don't share them publicly
- For the site, choose the localhost one
Export SITE_ID (should be the ID of the localhost site):
export SITE_ID=2Restart the app:
python manage.py runserver 0.0.0.0:8000Now log out as admin and log in with Google
Prep work
Host bastion-tunnel
HostName <IP>
User ubuntu
IdentityFile c:/Users/alexe/.ssh/<KEY>.pem
LocalForward 5433 dev-course-management-cluster.cluster-cpj5uw8ck6vb.eu-west-1.rds.amazonaws.com:5432
ServerAliveInterval 60
Connect to the bastion
ssh bastion-tunnelAnd then
pgcli -h localhost -p 5433 -u pgusr -d coursemanagementWhen connecting for the first time, create dev and prod schemas
CREATE DATABASE dev;
CREATE DATABASE prod;Django shell
export DATABASE_URL="postgresql://pgusr:${DB_PASSWORD}@localhost:5433/dev"
export SECRET_KEY="${DJANGO_SECRET}"
pipenv run python manage.py shellor
export DATABASE_URL="postgresql://pgusr:${DB_PASSWORD}@localhost:5433/prod"
export SECRET_KEY="${DJANGO_SECRET}"Finding user with email:
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(email='test@gmail.com')See endpoints.md for complete API documentation including:
- Course Criteria (public)
- Homework Data
- Project Data
- Graduates Data
- Update Enrollment Certificate
- Create Course Content