Comment WSGI, CGI et les frameworks sont-ils tous connectés?
Apache écoute sur le port 80. Il reçoit une requête HTTP. Il analyse la demande pour trouver un moyen de répondre. Apache a BEAUCOUP de choix pour répondre. Une façon de répondre consiste à utiliser CGI pour exécuter un script. Une autre façon de répondre est de simplement servir un fichier.
Dans le cas de CGI, Apache prépare un environnement et appelle le script via le protocole CGI. Il s'agit d'une situation standard Unix Fork / Exec - le sous-processus CGI hérite d'un environnement OS comprenant le socket et stdout. Le sous-processus CGI écrit une réponse, qui revient à Apache; Apache envoie cette réponse au navigateur.
CGI est primitif et ennuyeux. Principalement parce qu'il forge un sous-processus pour chaque demande, et que le sous-processus doit quitter ou fermer stdout et stderr pour signifier la fin de la réponse.
WSGI est une interface basée sur le modèle de conception CGI. Ce n'est pas nécessairement CGI - il ne doit pas forcer un sous-processus pour chaque requête. Cela peut être CGI, mais ce n'est pas obligatoire.
WSGI ajoute au modèle de conception CGI de plusieurs manières importantes. Il analyse les en-têtes de requête HTTP pour vous et les ajoute à l'environnement. Il fournit toute entrée orientée POST sous la forme d'un objet de type fichier dans l'environnement. Il vous fournit également une fonction qui formulera la réponse, vous évitant ainsi de nombreux détails de mise en forme.
Que dois-je savoir / installer / faire si je veux exécuter un framework Web (par exemple web.py ou cherrypy) sur ma configuration CGI de base?
Rappelez-vous que forger un sous-processus coûte cher. Il existe deux façons de contourner ce problème.
Embarquez mod_wsgi
ou mod_python
incorpore Python dans Apache; aucun processus n'est fourchu. Apache exécute directement l'application Django.
Daemon mod_wsgi
ou mod_fastcgi
permet à Apache d'interagir avec un démon séparé (ou "processus de longue durée"), en utilisant le protocole WSGI. Vous démarrez votre processus Django de longue durée, puis vous configurez le mod_fastcgi d'Apache pour communiquer avec ce processus.
Notez que cela mod_wsgi
peut fonctionner dans les deux modes: intégré ou démon.
Lorsque vous lirez sur mod_fastcgi, vous verrez que Django utilise flup pour créer une interface compatible WSGI à partir des informations fournies par mod_fastcgi. Le pipeline fonctionne comme ça.
Apache -> mod_fastcgi -> FLUP (via FastCGI protocol) -> Django (via WSGI protocol)
Django a plusieurs "django.core.handlers" pour les différentes interfaces.
Pour mod_fastcgi, Django fournit un manage.py runfcgi
qui intègre FLUP et le gestionnaire.
Pour mod_wsgi, il existe un gestionnaire principal pour cela.
Comment installer le support WSGI?
Suivez ces instructions.
https://code.google.com/archive/p/modwsgi/wikis/IntegrationWithDjango.wiki
Pour le fond voir ceci
http://docs.djangoproject.com/en/dev/howto/deployment/#howto-deployment-index