E-learning platform with CMS
The E-learning Platform is essentially a CMS allowing students and instructors to collaborate together. Students can register to the platform and enroll to courses. Instructors can add content to the modules, create new subjects and provide multimedia content to each course. The platform enables students/instructor to exchange real-time ideas/concerns using a web-based chat system
The following is a high-level overview of the actual infrastructure architecture, designed for production usage. A reverse proxy takes incoming connections and passes the requests to the application server uWSGI for synchronous requests and to Daphne for asynchronous request specific to websocket protocol using channel/redis. Static files such as html/css/js are served via nginx for increased performances. Django MVT architecture handles the actual backend logic taking requests matching urls and returning rendered templates via specific views.
- Front-end defined using simple html/css. Implemented javascript calls to perform operation after DOM completion such as websocket instantiation/communication to support a real-time web-chatting system
- Provided API endpoint to allow students to perform enrolling activities using a Django REST framework. Defined serializer to handle the subject model translation/deserialization. Defined auth system using a django base authentication framework.
- Used viewsets and router simplifying development of the API system. Enhanced permissions
- Built CMS content structure based on model hierarchy having modules, subjects, and courses. Implemented various models to enhance instructor experience allowing to work with images/videos/text and upload new content
- Built authentication view using a Django built-in authentication framework
- Defined course structure using Mixins and class-based views performing course list,edit,delete, add/remove modules
- Defined drag-and-drop functionality using javascript to re-order course content via UI (instructor-based access)
- Used redis/memcached caching based functionality to enhance user experience performing multiple caching strategies on queryset, template-based, per view/per-site cache.
- Built a real-time messaging system using Websocket, implementing django/redis channels in combination with ASGI interface to process asynchronous requests. Re-written django chat app to support asynch communication
- Deployed production ready environment using nginx, docker containers, ASGi daphne/uWSGI interface for synch/asynch processing, docker-compose as orchestrator, psql as database layer, redis as a caching system
- python 3.9
- django 4.1
- psql
- html/css/javascript/AJAX
- docker/docker-compose
- redis
- memcache
- websocket/channels
- django debug toolbar (sql/cache/request troubleshooting)
- django redis board
- ASGi Daphne
- uWSGi
- REST framework
- Nginx Reverse proxy with SSL termination
- re-write the front end using react/angular for better granularity/ui experience
- enhance REST auth using token-based authentication
- boost deployment pipeline using docker-swarm/kb8s