Skip to content
A+ frontend portal - A+ LMS documentation:
Python HTML JavaScript CSS Shell
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
api Fix API_DEBUG print Jun 2, 2019
aplus New Shibboleth authentication Aug 6, 2019
apps Drop south migrations Aug 12, 2019
assets_src/translate-js Update translate-js libraries Aug 14, 2019
authorization Upgrade to Django 2.0 May 15, 2019
course Add link to users summary page on a course Aug 19, 2019
deviations Fix deprecated Django APIs in Django 1.10 May 13, 2019
diploma Upgrade to Django 1.11 May 13, 2019
edit_course Add translations for ExerciseCollection feature Aug 14, 2019
exercise Fix grader authentication for LTIExercises Aug 20, 2019
external_services Create LTI api url from BASE_URL Aug 13, 2019
inheritance Drop south migrations Aug 12, 2019
lib Fix grader authentication for LTIExercises Aug 20, 2019
locale/fi/LC_MESSAGES Improved the results page for end of course for teachers. Aug 20, 2019
news Fix deprecated Django APIs in Django 1.10 May 13, 2019
notification Drop south migrations Aug 12, 2019
selenium_test Userprofile is external, if there is no student number Aug 6, 2019
templates Filtering with comparison operators and regex. Filtering move to sepe… Aug 12, 2019
threshold Fix deprecated Django APIs in Django 1.10 May 13, 2019
userprofile Drop south migrations Aug 12, 2019
.gitignore Upgrade to Django 2.2 May 17, 2019 A+ source code initial commit Feb 17, 2015 Upgrade to Django 2.2 May 17, 2019
a-plus Rename a-plus to aplus Jun 20, 2016
requirements.txt Drop south migrations Aug 12, 2019
requirements_prod.txt Rewrite deployment information Feb 3, 2019

A+ Build status

"We present a design and open source implementation for a service oriented e-learning system, which utilizes external services for supporting a wide range of learning content and also offers a REST API for external clients to fetch information stored in the system."

Karavirta, V. & Ihantola, P. & Koskinen, T. (2013) Service-Oriented Approach to Improve Interoperability of E-Learning Systems

The system has since been developed by various contributors at Aalto University, Finland.


A+ is a Django 2.2 and Python 3.5+ application which has been run in production using Postgresql database, Apache 2 (or Nginx) and uwsgi. See doc/ for further deployment instructions. Consider using virtualenv and pip3 install -r requirements.txt. Create and override necessary Django settings from aplus/ At least DEBUG, SECRET_KEY and DATABASES must be set in case of deployment. The server process needs write access to the media directory.


See doc/ on how to create and run a test environment for development. The doc/ describes grader service protocols and doc/ is a minimal sample for implementing different kind of exercise graders. A separate grading framework application supporting the A+ protocol exists at

The selenium_test/ offers an integration test suite using the Selenium Firefox driver.

Code Organization

  • aplus/ : Django main settings
  • userprofile/ : User information and authentication
  • shibboleth_login/ : User authentication via external Shibboleth login. Requires Shibboleth configuration for the Apache/Nginx web server.
  • course/ : The course instances, modules and chapters
  • exercise/ : Exercises and submissions to them
  • deviations/ : Student deviations to submission rules (deadline extensions and extra submission attempts)
  • notification/ : User messaging framework
  • edit_course/ : The course editing for teachers
  • inheritance/ : Utilities for model class hierarchy
  • external_services/ : Linking to external services, optionally LTI authenticated
  • apps/ : Provides plugins that can integrate additional content to course instances
  • api/ : An HTTP REST service API for accessing A+ data
  • redirect_old_urls/ : Redirections from the most important old URL targets
  • lib/ : General library code
  • templates/ : General site templates
  • assets/ : Static web server assets, e.g., JavaScript, styles and images
  • media/ : User uploaded files
You can’t perform that action at this time.