Blog ENI : Toute la veille numérique !
-25€ dès 75€ sur les livres en ligne, vidéos... avec le code FUSEE25. J'en profite !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
  1. Livres et vidéos
  2. Django
  3. Les applications Django
Extrait - Django Industrialisez vos développements Python
Extraits du livre
Django Industrialisez vos développements Python Revenir à la page d'achat du livre

Les applications Django

Introduction

En plus des fonctionnalités de base du framework, Django est livré avec un ensemble de packages additionnels sous la forme d’applications à installer (ou non) dans les réglages. Ces packages sont situés dans django.contrib. Nous allons décrire ces applications, puis nous nous intéresserons à quelques applications ou projets de la vaste communauté Django.

Les applications Django incluses dans le package contrib

Ces packages ne font pas partie du noyau de Django, car historiquement ils ont été développés à côté, puis progressivement, au fil du temps, ils sont devenus partie intégrante du framework. D’une part c’est pour cette raison historique qu’ils sont situés dans contrib et d’autre part cela permet, puisqu’ils sont « pluggable », d’éventuellement ne pas installer certains d’entre eux ou de les remplacer par d’autres applications. Nous avons déjà utilisé ou évoqué certains d’entre eux dans ce livre car ils font vraiment partie intégrante du framework.

1. L’administration de Django : « the Django admin site »

Ce package est tellement populaire et utile que l’on peut considérer qu’il fait partie intégrante de Django. Nous lui avons ainsi consacré spécifiquement le chapitre L’administration de Django.

Il dépend des packages django.contrib.auth et django.contrib.contenttypes.

2. django.contrib.auth

Ce package gère l’authentification des utilisateurs, les utilisateurs anonymes, les groupes, les permissions, les backends d’authentification, ainsi que les signaux de login et de logout.

Nous allons le parcourir rapidement, car certaines parties ont déjà été traitées dans ce livre notamment au chapitre Approfondissements à la section Personnaliser le « USER MODEL » de Django.

Ce package dépend de django.contrib.contenttypes, AuthenticationMiddleware et SessionMiddleware.

Les permissions sont des droits binaires sous la forme de flags : oui ou non, un utilisateur a t-il les droits requis pour réaliser une tâche donnée ?

Les groupes servent à donner des droits à un ensemble d’utilisateurs.

La gestion de l’authentification des utilisateurs est réalisée sous la forme de backends « pluggables » que l’on peut remplacer par des systèmes d’authentification tiers, par exemple un login Facebook ou Google. De base, Django propose seulement quelques systèmes d’authentification.

Le contenu de django.contrib.auth

La classe class models.User

Les champs...

La gestion des caches

Django permet de concevoir des sites dynamiques, mais la contrepartie d’un site dynamique est que chaque requête va activer des traitements : des accès à la base de données vont être réalisés, du code Python exécuté et des templates rendus. En dehors du fait de chercher à optimiser tout cela, comme cela est présenté dans ce chapitre à la section relative au déploiement, la mise en place de mécanismes de gestion du cache est particulièrement importante car ils permettent des économies de temps de traitement et/ou de bande passante. Avant de rentrer dans les détails techniques des mécanismes offerts par Django, nous allons parler de la gestion de deux types de mécanismes de cache, pour lesquels on va devoir mettre en œuvre des stratégies différentes selon le type.

1. Le cache côté client ou cache du navigateur

Le premier type de cache est un cache sur lequel nous n’avons pas directement le contrôle, mais qui va permettre d’économiser à la fois du temps machine et de la bande passante. Les mécanismes que nous allons décrire s’appliquent également à tous les caches situées en aval du serveur, serveurs de cache ou proxies.

Schémas :

images/14RI03.png

Principe de fonctionnement du cache côté client

Nous n’avons pas directement le contrôle sur les caches situés en aval de notre serveur, cache du navigateur ou ceux de proxies comme Squid, mais le protocole HTTP nous permet d’informer le client sur la nécessité ou non de recharger une page, grâce aux headers ETag et Last-Modified, ainsi qu’aux réponses 304. On pense à utiliser généralement les headers pour les réponses GET, mais on peut appliquer le même mécanisme pour les autres méthodes HTTP.

Django propose deux mécanismes globaux pour gérer ETag et les réponses 304. Si vous avez installé le middleware CommonMiddleware, Django va calculer automatiquement ETag pour vous à chaque page, de plus si vous installez le middleware ConditionalGetMiddleware(django.middleware.http.ConditionalGetMiddleware), Django renverra automatiquement une réponse 304 en cas de contenu non modifié....

Les applications et projets Django de la communauté

Le nombre d’applications et de projets Django est important, il est hors de question de tous les lister. Sachez que la plupart des domaines sont traités, parfois avec plus ou moins de qualité. De plus les modules Python, eux aussi pléthoriques, sont pour beaucoup utilisables quasiment directement.

1. Où trouver des applications Django ?

PyPI (en anglais) 

Pour rechercher des applications Python ou Django, la première source est PyPI (https://pypi.python.org/pypi), ou PYthon Packages Index. Vous y trouverez sûrement votre bonheur, car le référencement des modules est assez exhaustif. Mais trouver le bon module Django avec PyPI est assez compliqué car il n’y a pas réellement d’informations permettant de comparer deux modules entre eux.

https://www.djangopackages.com (en anglais) 

djangopackages est une excellente source, 2543 packages Django sont référencés, dont 492 packages compatibles avec Python 3 (https://www.djangopackages.com/python3/).

Les packages sont classés par grandes catégories, de a à w : activities, admin interface, analytics, anti-spam, API creation, asset managers, authentication, authorization, auto-complete, awards and, badges, blogs, bootstraps, caching, calendar, captcha, chat, cms ,commenting, etc., widgets et wysiwyg editors.

Chaque package possède une description, et une comparaison entre les packages d’une même catégorie est possible.

2. Les tags et l’application django-taggit

Comme il est impossible de faire le tour de toutes les applications Django existantes, j’en ai choisi une qui présente un certain intérêt, car elle permet de gérer des tags que l’on peut ajouter à n’importe quel modèle Django. C’est une des plus puissantes pour gérer ce problème, elle est simple à...

Le déploiement et l’hébergement

1. Quel Python utiliser, pour quelle compatibilité ?

Django est compatible avec différentes implémentations de Python.

a. Jython

Jython est une implémentation de Python en Java, qui permet d’exécuter Python sur n’importe quelle machine virtuelle Java. Django peut être utilisé avec Jython.

Django nécessite une version de Jython au moins égale à la version 2.7b2. Pour installer Jython, consultez la documentation Jython à l’adresse : www.jython.org/

Créer un servlet

Pour les tests et le développement, le serveur de Django fait l’affaire, mais pour déployer en production, vous devrez utiliser un « Java servlet container », comme Apache Tomcat.

Les serveurs d’applications JavaEE comme GlassFish et JBoss font également l’affaire.

Installer Django sur Jython

La procédure est identique à une installation sous Python, il faut simplement penser à remplacer dans les commandes Python par Jython.

Les librairies à installer avec Jython

Les drivers/backends de Django étant en grande partie composés de code natif, ils ne vont pas tourner sous Jython. Le projet django-jython fournit des drivers/backends Java et des utilitaires pour travailler avec Jython et Django. On trouve ce projet ici : https://pypi.python.org/pypi/django-jython/1.7.0b2

Les instructions d’installation sont disponibles aux adresses https://pythonhosted.org/django-jython/quickstart.html#install et https://pythonhosted.org/django-jython/database-backends.html.

Les différences entre Django tournant sur Python et Django tournant sur Jython

Django fonctionne globalement à l’identique avec Jython, seules quelques différences sont à signaler :

La documentation Django est écrite pour Python, pensez à remplacer Python par Jython et PYTHONPATH par JYTHONPATH. La librairie Pillow n’est pas supportée avec Jython.

b. Python 3

La version 1.5 de Django est la première version qui intègre à la fois le support de Python 3, à partir de Python 3.2 et de Python 2, à partir de la version 2.6.5. Pour tourner avec Python 2 et 3, Django utilise le même code source. Nous allons présenter quelques points importants à respecter pour écrire une application...

Hébergement : le déploiement en production

1. Rappel sur les méthodes d’hébergement

Lorsque l’on héberge un site dynamique, il y a plusieurs façons d’ajouter le serveur d’applications au serveur web. La moins efficace et la plus ancienne est le protocole CGI qui consiste à exécuter le serveur à chaque requête. Elle est la moins efficace, et ce davantage avec Python que dans ce mode : le serveur web va charger le programme Python qui va charger Django et votre code, puis qui va exécuter Django, lire les données de la requête, puis exécuter votre code, retourner les données par un mécanisme de pipes Unix, puis tous ces processus vont se terminer.

Schéma :

images/14RI10.png

Exécution :

images/14RI11.png

Le moyen le plus efficace fait résider le code de l’application directement dans le serveur web, par exemple les solutions utilisant mod_python ou mod_wsgi. Ainsi le code est résident et seul le code utile (Django et vos applications) est exécuté à chaque requête, accélérant énormément l’exécution des applications web.

Schéma :

images/14RI12.png

Exécution :  

images/14RI13.png

Enfin, entre les deux mais d’efficacité proche des modules mod_python et WSGI, les méthodes comme FastCGI, AJP ou SCGI fonctionnent avec une liaison rapide entre le serveur web et un serveur d’applications résidant. Ces méthodes, bien que légèrement plus lourdes, peuvent avoir des avantages en termes de sécurité, les deux processus s’exécutant dans des environnements et des contextes différents.

2. Déploiement avec Apache et le module mod_python

La configuration Apache avec mod_python a longtemps été l’installation cible recommandée pour les projets Django. mod_python est un plug-in/module d’Apache qui permet de faire tourner les projets Python directement dans le serveur Apache, le code Python restant chargé tant qu’Apache fonctionne.

Elle nécessite une version d’Apache 2.x avec un module mod_python en version 3.x.

a. Configuration de base

Vérifiez que le module mod_python est installé et activé. Consultez la documentation d’Apache relative à votre installation pour savoir quel fichier modifier. Vous devez avoir...