Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

Les requêtes HTTP, les URL et les vues

Introduction

Comment les requêtes HTTP sont-elles traitées dans Django ?

Étape 1 : Django détermine quelle configuration d’URL choisir. En règle générale, c’est celle que vous avez définie dans le fichier settings.py par la variable ROOT_URLCONF en général le fichier urls.py de votre projet. Cependant, si la requête a été prétraitée par un middleware et qu’elle possède un attribut urlconf, c’est cet attribut qui sera utilisé à la place de ROOT_URLCONF.

Étape 2 : Django charge le module Python trouvé en étape 1 et recherche la variable urlpatterns. Cette variable est attendue sous la forme d’une liste Python. Elle est en règle général le résultat d’un appel à la fonction django.conf.urls.patterns().

Étape 3 : Django parcourt la liste urlpatterns et recherche la première expression régulière qui est vérifiée.

Étape 4 : dès qu’une expression régulière est vérifiée, Django appelle la vue qui lui est associée, avec les arguments suivants :

  • En première position : la requête HTTP sous la forme d’une instance de la classe HttpRequest.

  • Sous la forme d’arguments nommés, la liste des valeurs capturées par l’expression...

La configuration des URL (URL dispatcher)

Réaliser un site présentant une organisation des URL claire et élégante est tout sauf un détail. D’une part, cela va de pair avec une logique de présentation claire, mais aussi cela participe à l’amélioration de la performance du site vis-à-vis des moteurs de recherche (SEO - Search Engine Optimization), cela maintient un schéma cohérent d’URL et donc de liens permanents ’naturels’, et met en cohérence les pages, le breadcrumb et le schéma d’URL. Découpler le schéma d’URL de l’implémentation technique (le code) est également d’une grande importance pour la vie du site, ses évolutions ainsi que la maintenance.

Exemple :


/articles/livres/romans/nouveautes/xxxxx.html
 

1. Introduction

Pour mettre en œuvre les principes évoqués en introduction, Django offre un mécanisme efficace appelé URLconf. Cette URLconf, ou plus simplement configuration des URL, est du code Python que vous écrivez pour associer des schémas d’URL, décrits sous la forme d’expressions régulières, à des fonctions Python implémentant vos vues (ou vos classes basées sur des vues).

Comme ce schéma est du code Python, il peut être construit dynamiquement. Il n’y a pas de contrainte en termes de taille ou de complexité du schéma et Django fournit des outils permettant d’adapter ce schéma à chaque langue/langage supporté(e) par votre site :

Exemple :


fr : /articles/musique/...  
en : /articles/music/...
 

2. Rappels sur les expressions régulières

Avant d’aller plus loin, voici quelques rappels et explications de base concernant les expressions régulières. Les expressions régulières sont un puissant outil de capture et reconnaissance de chaînes de caractère. Nous n’avons pas la place dans cet ouvrage pour faire un cours sur les expressions régulières, référez-vous par exemple à la documentation Python pour cela.

r : indique en Python que la chaîne de caractère est de type « raw », c’est-à-dire que le contenu de la chaîne ne doit pas être échappé....

Les vues

1. Les vues basées sur les fonctions

Une fonction vue est une fonction Python ordinaire qui accepte en premier paramètre positionnel une requête HTTP et retourne une réponse HTTP. La réponse peut être une page HTML, une redirection, un code d’erreur (404, 500...) un document texte, un fichier XML, du PDF, un fichier ZIP, une image... en fait, tout ce que vous voulez.

La fonction contient un code Python quelconque permettant de faire ce que vous souhaitez. Vous pouvez installer ce code où vous voulez, bien que pour des raisons de cohérence entre les projets il est convenu d’installer les vues dans le répertoire de l’application auquel vous donnez le nom views.py et, si celui-ci est trop gros/complexe, de créer un module Python views contenant des regroupements de vues. Il n’y a rien de mystérieux, une vue n’est qu’une autre fonction Python.

Écrivons une vue très simple :


from django.http import HttpResponse  
import ma_librairie_python  
   
def bonjour(request):  
     resultat = ma_librairie_python.un_calcul()  
     html = "<html><body>Hello World, »  
     html += "<br> le resultat est : %s </body></html> » % resultat 
     return HttpResponse(html) 
 

Regardons ce code d’un peu plus près :

1. Nous importons la classe HttpResponse du module django.http et une librairie Python : « ma_librairie_python », pour rappeler que nous pouvons utiliser n’importe quel code Python dans une vue.

2. Puis nous définissons une fonction bonjour. C’est notre vue ! Le premier paramètre d’une fonction vue doit toujours être un paramètre positionnel recevant un objet de type HttpRequest. Il est de convention d’appeler cet objet request, cela n’a rien d’obligatoire mais rend le code lisible par autrui. Le nom de votre fonction vue n’a pas d’importance. Il sert dans la configuration des URL pour retrouver la vue, donnez-lui un nom qui indique clairement ce que la vue réalise.

3. La vue réalise des traitements Python.

4. Puis elle retourne un objet de type HttpResponse qui contient ce que nous avons fabriqué. Pour l’instant, considérez simplement...