WSGI staat voor Web Server Gateway Interface. Het is een specificatie voor een universeel interface tussen de webserver en de webapplicaties. WSGI, dat wordt uitgesproken als ‘Whiskey’, heeft in feite als doel het implementeren van webapplicaties die zijn geschreven in Python naar een webserver te vergemakkelijken. Het wsgi.py-bestand dat je ziet in een Django-project is het standaard WSGI-configuratiebestand dat Django genereert wanneer je een nieuw project start.
Het belangrijkste doel van het WSGI-bestand in Django is het opzetten van een interface naar de server. Het maakt het mogelijk voor een standaardwebserver als Nginx of Apache om te communiceren met Django-applicaties. Zo kunnen Django-applicaties worden geserveerd op dezelfde manier als elke andere webpagina, ondanks hun inherente complexiteit en functionele variëteit.
In Django, als je een nieuw project maakt via het commando ‘django-admin startproject yourprojectname’, dan wordt in de hoofdmap van je project een bestand genaamd wsgi.py gegenereerd. Dat bestand ziet er meestal ongeveer zo uit:
```
“”“
WSGI config for myproject project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/
“”“
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault(‘DJANGO_SETTINGS_MODULE’, ‘myproject.settings’)
application = get_wsgi_application()
```
Deze code doet twee belangrijke dingen:
1. Het stelt het DJANGO_SETTINGS_MODULE omgevingsvariabele in op het instellingenbestand van het gewenste Django-project.
1. Het definieert een toepassingsvariabele die wordt opgeroepen door de WSGI-server om de aanvraag te bedienen. De webserver laadt de WSGI-module op (de Python-padinstelling in het WSGIScriptAlias-directief in Apache of de wsgi-file verklaring in Nginx) en roept de toepassingscallable aan.
Ervan uitgaande dat dit bestand correct is geconfigureerd, variëren de procedures om Django en de webserver in te stellen op basis van de specifieke webserver in kwestie.
Vermeldenswaard is dat het wsgi.py-bestand en het WSGI-protocol over het algemeen niet beperkt zijn tot Django, maar een fundamenteel onderdeel zijn van Python webtechnologie.
Bronnen: Django Project Documentation, Python.org Documentation over WSGI
Bronnen:
1. Django Project Documentation. (n.d.). How to use Django with uWSGI. https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/uwsgi/
2. Python.org. (n.d.). PEP 333 — Python Web Server Gateway Interface v1.0. https://peps.python.org/pep-0333/