Blog ENI : Toute la veille numérique !
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
🎁 Jusqu'au 31/12, recevez notre
offre d'abonnement à la Bibliothèque Numérique. Cliquez ici
  1. Livres et vidéos
  2. Django
  3. Alternatives
Extrait - Django Développez vos applications web en Python (fonctionnalités essentielles et bonnes pratiques)
Extraits du livre
Django Développez vos applications web en Python (fonctionnalités essentielles et bonnes pratiques)
3 avis
Revenir à la page d'achat du livre

Alternatives

Propos

Ce chapitre est consacré à la présentation d’alternatives aux choix retenus pour mener la construction du projet exposé tout au long de cet ouvrage. Ils ne sont pas moins valables, mais soit il fallait bien arrêter un choix pour ne pas se disperser, soit il était plus confortable dans un premier temps d’éviter des solutions plus élaborées.

Alternance entre plusieurs versions de Django

Django vise un rythme de publication d’une nouvelle version environ tous les huit mois pour apporter des fonctionnalités. On peut toujours se dire que son projet n’en a pas besoin et décider de conserver sa version actuelle puisqu’elle donne satisfaction. Mais cette cadence élevée de publication a comme conséquence l’obsolescence tout aussi rapide des anciennes versions, ce qui signifie un terme à la maintenance corrective des dysfonctionnements et plus sensiblement des failles de sécurité.

Si on ne fait rien de particulier, une installation ordinaire d’une nouvelle version de Django va remplacer la version actuelle. Cette bascule sans retour peut convenir dans des situations simples et sans enjeu, un environnement de démonstration par exemple.

Dans la plupart des cas, il est nécessaire de prévoir une phase de transition, où les projets sont évalués au sein de la nouvelle version de l’infrastructure logicielle et éventuellement ajustés, notamment face aux pratiques dépréciées qui font apparaître des messages d’avertissement, voire d’erreur si on n’a pas anticipé les changements annoncés. Dans tous les cas, il est courant que le développement du projet suive son cours et que, pour des raisons d’engagements de maintenance corrective, il faille s’assurer du bon fonctionnement du projet sur la version précédente, ou même sur un certain nombre de versions anciennes. 

C’est encore plus vrai pour un développeur de paquets redistribuables publics, qui par nature ne maîtrise aucunement la progression des montées de version des plateformes utilisatrices de ses paquets.

L’objectif va être d’avoir un moyen efficace pour alterner la version de Django. Ce n’est évidemment pas la méthode brutale de réinstallation de l’une sur l’autre, même si l’opération n’est pas longue.

1. Par configuration propre au site

Mise en garde :

Cette méthode est un contournement et n’est pas officiellement supportée par l’infrastructure logicielle, mais elle a l’avantage d’être simple et ne nécessite l’emploi d’aucun outil...

Variations de configurations

Le chapitre Création de site a donné plusieurs techniques élémentaires pour ajuster des paramètres de configuration en fonction de l’environnement d’exécution : développement, tests, production, etc. Le revers de leur simplicité était la possible introduction de redondances dans les définitions. Cette section va exposer deux autres techniques, plus complètes, pour perfectionner ce point.

1. Superposition en profondeur

Le point de départ est la dernière base de code donnée dans la sous-section « Les techniques par superposition » du chapitre Création de sites, rappelée ci-dessous. 

settings.py 

# Configuration par défaut (production) 
# ... 
 
try: 
 from mysite import settings_local 
except ImportError: 
 print(""" 
   ----------------------------------------------------- 
    Vous devez créer un fichier settings_local.py  
    et y mettre vos paramètres de configuration locale. 
   ----------------------------------------------------- 
   """) 
 import sys 
 sys.exit(1) 
else: 
 import re 
 for attr in dir(settings_local): 
   if not attr[0].isupper(): continue 
   value = getattr(settings_local, attr) 
   match = re.search('^EXTRA_(\w+)', attr) 
   if match: 
     globals()[match.group(1)] += value 
   else: 
     globals()[attr] = value 

Dans la configuration par défaut, supposons cette définition ordinaire :

TEMPLATES = [ 
 { 
   'BACKEND': 'django.template.backends.django.DjangoTemplates', 
   'DIRS': [os.path.join(_SITE_ROOT, 'templates')], 
   'APP_DIRS': True, 
   'OPTIONS': { 
     'context_processors': [ 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
     ], 
   ...