Création du projet et de l'application
On choisit arbitrairement de travailler dans le dossier /home/jlesech/www-django. À chacun de l'adapter en fonction de son environnement.
On crée un projet nommé idreammicro.
django-admin.py startproject idreammicro
On se place dans le dossier du projet. Tous les chemins cités dans la suite de cet article seront relatifs à cet emplacement..
cd idreammicro
Puis on crée une application nommée helloworld.
django-admin.py startapp helloworld
Il en résulte l'arborescence suivante, introduite avec Django 1.4.
idreammicro |_ helloworld | |_ __init__.py | |_ models.py | |_ tests.py | |_ views.py |_ idreammicro | |_ __init.py__ | |_ settings.py | |_ urls.py | |_ wsgi.py |_ manage.py
Support WSGI
Django 1.4 a introduit une amélioration du support WSGI, en embarquant une application WSGI dans le fichier idreammicro/wsgi.py.
"""
WSGI config for idreammicro project.
This module contains the WSGI application used by Django's development server
and any production WSGI deployments. It should expose a module-level variable
named ``application``. Django's ``runserver`` and ``runfcgi`` commands discover
this application via the ``WSGI_APPLICATION`` setting.
Usually you will have the standard Django WSGI application here, but it also
might make sense to replace the whole Django WSGI application with a custom one
that later delegates to the Django one. For example, you could introduce WSGI
middleware here, or combine a Django application with an application of another
framework.
"""
import os
# We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
# if running multiple sites in the same mod_wsgi process. To fix this, use
# mod_wsgi daemon mode with each site in its own daemon process, or use
# os.environ["DJANGO_SETTINGS_MODULE"] = "idreammicro.settings"
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "idreammicro.settings")
# This application object is used by any WSGI server configured to use this
# file. This includes Django's development server, if the WSGI_APPLICATION
# setting points here.
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)
Activation de l'application
Dans le fichier idreammicro/settings.py, on active l'application helloworld (ligne 127).
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'helloworld',
)
Vue
Dans le fichier helloworld/views.py, on crée la vue index.
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello world!")
Celle-ci se veut la plus simple possible et affiche un simple Hello world!.
Urls
On crée le fichier helloworld/urls.py, on configure l'url de la vue index précédemment créée.
from django.conf.urls import patterns, url
from helloworld import views
urlpatterns = patterns('',
url(r'^$', views.index, name='index')
)
Dans le fichier idreammicro/urls.py, on inclut le fichier contenant les urls de l'application helloworld.
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
# from django.contrib import admin
# admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'idreammicro.views.home', name='home'),
# url(r'^idreammicro/', include('idreammicro.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
# url(r'^admin/', include(admin.site.urls)),
url(r'^helloworld/', include('helloworld.urls')),
)
Afin de vérifier que le projet et l'application sont fonctionnels, on lance le serveur de développement.
python manage.py runserver
Dans un navigateur, on saisit l'adresse http://localhost:8000/helloworld.
Magnifique ! Le projet et l'application fonctionnent. On peut maintenant passer aux choses sérieuses et les servir à l'aide d'Apache.
Virtual Host Apache
On choisit de créer un serveur virtuel dédié au projet Django. Les opérations suivantes nécessitent d'avoir les droits d'administration.
On crée le fichier /etc/apache2/sites-available/idreammicro.
<VirtualHost *:80>
ServerName django
ServerAlias django
DocumentRoot /home/jlesech/www-django/idreammicro
<Directory /home/jlesech/www-django/idreammicro>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess django processes=2 threads=15 display-name=%{GROUP} python-path=/home/jlesech/www-django/idreammicro
WSGIProcessGroup django
WSGIScriptAlias / /home/jlesech/www-django/idreammicro/idreammicro/wsgi.py
<Directory /home/jlesech/www-django/idreammicro/idreammicro>
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/idreammicro_error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/idreammicro_access.log combined
</VirtualHost>
On active le nouveau serveur virtuel.
a2ensite idreammicro
Dans le fichier /etc/hosts, on ajoute un host (ligne 3).
127.0.0.1 localhost 127.0.1.1 i7 127.0.0.1 django # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
Dans un navigateur, on saisit l'adresse http://django/helloworld.
Conclusion
Comme l'avait montré le précédent article, servir un projet Django avec Apache et le module WSGI était déjà relativement simple. C'est encore plus simple aujourd'hui !
Par rapport à Django 1.3, Django 1.4 et ses versions supérieures nous épargnent la création de l'application WSGI. Ainsi on se concentre sur la partie spécifique à chaque serveur, en l'occurrence la création d'un serveur virtuel Apache dédié au projet Django.
Références
- Django Documentation - How to deploy with WSGI
- Django Documentation - How to use Django with Apache and mod_wsgi
- Quick configuration guide for mod_wsgi


