WSGI stands for Web Server Gateway Interface. It is a specification that describes how a web server communicates with web applications, and how web applications can be chained together to process one request. WSGI is the Python standard for web servers to communicate with web applications.
When you build a Django project, a wsgi.py file is automatically generated in each Django project. This file contains the settings necessary for your application to work with WSGI capable servers.
What this file does is define a callable that takes two arguments. The servers use it to communicate with your application. The ‘application’ callable is the server entry point to your web application. It is specified in the wsgi.py as a function that can be called with a couple of arguments and should return a response.
For instance, the wsgi.py file generated by Django when you create a Django project by running `django-admin startproject` will look something like this:
```
“”“
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.0/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()
```
In the above snippet `myproject` is the name of the project you specified when running `django-admin startproject`.
The statement `application = get_wsgi_application()` creates an instance of WSGI application which can communicate with the web server.
This WSGI interface has been used by a number of servers and applications, apart from Django. Other Python frameworks like Flask also use it to ensure that they can communicate with web servers in a standard manner.
It’s also worth mentioning that although WSGI is the widely adopted standard for serving Python web applications, there are also other interfaces like ASGI (Asynchronous Server Gateway Interface), an emerging Python standard for asynchronous web applications, which is something that Django also started to adopt from version 3.0.
Sources of Information:
1. Django Documentation: How to Deploy With WSGI – https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
1. Python Web Server Gateway Interface v1.0 – https://www.python.org/dev/peps/pep-0333/
1. Django Documentation: Async Support – https://docs.djangoproject.com/en/3.2/topics/async/