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
Install pipenv if you don't have it yet:
pip install pipenvInstall the dependencies (you need Python 3.9):
pipenv installActivate virtual env:
pipenv shellSet the database to local:
export DATABASE_URL="sqlite:///db/db.sqlite3"Make migrations:
make migrations
# python manage.py migrateAdd an admin user:
make admin
# python manage.py createsuperuserAdd some data:
make datamake run
# python manage.py runserver 0.0.0.0:8000Build it:
docker build -t course_management .Run it:
docker run -d \
-p 8000:8000 \
--name course_management \
-e DATABASE_URL="sqlite:////data/db.sqlite3" \
-v ${PWD}/db:/data \
course_managementif you're on cygwin:
docker run -it --rm \
-p 8000:8000 \
--name course_management \
-e DATABASE_URL="sqlite:////data/db.sqlite3" \
-v `cygpath -w ${PWD}/db`:/data \
course_managementremove the container later
docker rm course_managementget to the container
docker exec -it course_management bashIf 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')There are /data endpoints for getting the data
Using them:
TOKEN="TOKEN"
HOST="http://localhost:8000"
COURSE="fake-course"
HOMEWORK="hw1"
curl \
-H "Authorization: ${TOKEN}" \
"${HOST}/data/${COURSE}/homework/${HOMEWORK}"