This is the emerging Tsugi library for Django - https://www.tsugi.org
https://pypi.org/project/django-tsugi/
Install
pip install django-tsugi # or pip3
Add "django_tsugi" to your INSTALLED_APPS and add the keyset url for your controlling server in settings.py like this:
INSTALLED_APPS = [ ... 'django_tsugi', ] # To set up Tsugi TSUGI_KEYSET = "https://dev1.tsugicloud.org/tsugi/lti/keyset-ext";
Add a line to your application's urls.py file to handle launches and tell Tsugi which view to redirect to after the launch is successful:
from . import views from django_tsugi.views import LaunchView urlpatterns = [ path('', views.GradeView.as_view(), name='grade' ), path('launch', LaunchView.as_view(), {'success_url' : 'grade'} ), ]
Add the TsugiMixin to your class based view and it will define the request.tsugi variable with the user, context, and link information:
from django.views import View from django_tsugi.mixins import TsugiMixin class GradeView(TsugiMixin, View): def get(self, request) : context = {'tsugi': request.tsugi} return render(request, 'grade/main.html', context) def post(self, request) : grade = float(request.POST.get('grade')) comment = request.POST.get('comment') retval = request.tsugi.result.gradeSend(grade, comment) context = {'tsugi': request.tsugi, 'retval' : retval} return render(request, 'grade/done.html', context)
If you are running your Django tool locally and Tsugi locally, you can use the following in settings.py:
TSUGI_KEYSET = "http://localhost:8888/tsugi/lti/keyset-ext";
If you are working on a new version of this library with a django tsugi app, you can release a new version locally with:
python3 setup.py sdist ; pip3 install dist/*.tar.gz
This library is released to https://pypi.org/project/django-tsugi/
You need twine to push changes to pypi:
pip3 install twine # If needed pip install --upgrade twine # If needed pip3 install twine==1.12.1 # If needed since later twines mess up
To release a whole new version, update the version in setup.py and then:
rm dist/* ; python3 setup.py sdist ; twine check dist/* twine upload dist/*
You cannot upload the same version number twice.
[1] How to write reusable apps - https://docs.djangoproject.com/en/2.2/intro/reusable-apps/
[2] Tutorial on Packaging and Distributing Projects - https://packaging.python.org/tutorials/packaging-projects/
[3] https://pypi.org/ - https://packaging.python.org/tutorials/packaging-projects/#uploading-the-distribution-archives