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 pipenv
Install the dependencies (you need Python 3.9):
pipenv install
Activate virtual env:
pipenv shell
Set the database to local:
export DATABASE_URL="sqlite:///db/db.sqlite3"
Make migrations:
make migrations
# python manage.py migrate
Add an admin user:
make admin
# python manage.py createsuperuser
Add some data:
make data
make run
# python manage.py runserver 0.0.0.0:8000
Build 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_management
if 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_management
remove the container later
docker rm course_management
get to the container
docker exec -it course_management bash
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=2
Restart the app:
python manage.py runserver 0.0.0.0:8000
Now 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-tunnel
And then
pgcli -h localhost -p 5433 -u pgusr -d coursemanagement
When 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 shell
or
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}"