Cours sur Django Ce cours sur Django vous permettra de concevoir votre propre page web grâce à Python, de découvrir les avantages d’un framework ainsi l’utilité de django dans l’utilisation et la gestion d’une page. Si jamais mes explications ne suffisent pas, rendez-vous sur le site officiel de Django : https://www.djangoproject.com/ I. Django et les frameworks. 1) Qu’est-ce qu’un Framework ? Un Framework ou littéralement « Cadre de travail » permet à un développeur de travailler plus aisément grâce à des outils supplémentaires. Ce n’est donc pas quelque chose d’obligatoire pour pouvoir programmer mais cela aide grandement. Dans le fond, il s’agit pour le développeur d’utiliser plusieurs bibliothèques mises à disposition pour ne pas avoir à réécrire du code par exemple. C’est aussi un outil utile pour la transmission, votre travail sera mieux structuré et vous pourrez facilement transmettre votre projet à quelqu’un d’autre. 2) Qu’est-ce que Django ? Django est un framework Python dont l’utilisation est destinée au web. Pour information, il a été créé en 2003 et est aujourd’hui utilisé par des sites comme Instagram ou la NASA. Son succès est principalement due au fait qu’il est open source et donc, modifiable par tous. Son succès revient à sa devise : « Don't repeat yourself ». 1/ Nicolas.F II. Le fonctionnement de Django 1) En théorie Django possède un modèle différent de l’architecture MVC (Modèle-Vue-Contrôleur, il s’agit ici d’un modèle classique utilisé par la plus part des pages web permettant au développeur de fournir une interface graphique et des services classique à u utilisateur ainsi que d’accéder aux données) ce représentant comme tel : Django possède quant à lui une interface MVT (Modèle-Vue-Template). Cette architecture reprend les définitions de modèle et de vue que nous avons vues, et en introduit une nouvelle : le template (voir figure suivante). Un template est un fichier HTML, aussi appelé en français « gabarit ». Il sera récupéré par la vue et envoyé au visiteur ; cependant, avant d'être envoyé, il sera analysé et exécuté par le framework, comme s'il s'agissait d'un fichier avec du code. Django fournit un moteur de templates très utile qui permet, dans le code HTML, d'afficher des variables, d'utiliser des structures conditionnelles (if/else) ou encore des boucles (for), etc. Voici son modèle : 2/ Nicolas.F A savoir: Le modèle représente une information enregistrée en général dans une base de données. Il permet d'accéder à l'information, de la modifier, d'en ajouter une nouvelle, de la mettre à jour, etc. La vue n’est autre que la visualisation de l'information. C'est la seule chose que l'utilisateur peut voir. Non seulement elle sert à présenter une donnée, mais elle permet aussi de recueillir une éventuelle action de l'utilisateur (un clic sur un lien, ou la soumission d'un formulaire par exemple). Typiquement, un exemple de vue est une page web, ni plus, ni moins. Le contrôleur prend en charge tous les événements de l'utilisateur (accès à une page, soumission d'un formulaire, etc.). Il se charge de récupérer les données voulues dans les modèles. Après un éventuel traitement sur ces données, il transmet ces données à la vue, afin qu'elle s'occupe de les afficher. Lors de l'appel d'une page, c'est le contrôleur qui est chargé en premier, afin de savoir ce qu'il est nécessaire d'afficher. Django possède une faculté unique, lorsque vous allez créer votre page web, Django va le considérer comme un projet composé de plusieurs applications dans lesquelles vous pourrez gérer chaque partie de votre site. 2) En pratique La théorie c’est une chose, la mettre en pratique en est une autre ! Vous allez maintenant créer votre application via l’interprète MSDOS, pour créer un projet vous allez devoir accéder au fichier django-admin.py. Pour cela, saisissez la commande suivante : (Attention à votre emplacement, cela peut varier en fonction de l’installation de python) Cd C:\Users\$user_name$\AppData\Local\Programs\Python\PythonXX\Scripts Puis : django-admin.py startproject $nom_du_projet$ 3/ Nicolas.F Cela créera un nouveau dossier dans votre dossier script qui portera le nom de votre projet comme l’image ci-dessous : Dans mon cas, il s’agit de test_apply. La structure de votre projet sera la suivante : $nom_de_votre_projet$/ Manage.py $nom_de_votre_projet$/ __init__.py Settings.py Urls.py Wsgi.py Quelques explications : Vous pourrez trouver différents éléments dans ce dossier, seulement 3 vous seront utiles (manage.py, settings.py, urls.py) Le fichier le plus important pour le moment sera settings.py, celui-ci vous permettra de paramétrer votre application tandis qu’urls.py rassemblera toutes les URL de votre site web et la liste des fonctions à appeler pour chaque URL. 4/ Nicolas.F Maintenant que votre projet est créé, vous pourrez lancer le serveur de développement de django via la commande suivante : manage.py runserver dans l’invite de commande. Vous pouvez aussi effectuer la commande manage.py help pour voir toutes les options de manage.py Vous devrez d’abord vous placer sur l’emplacement de manage.py soit Cd C:\Users\$user_name$\AppData\Local\Programs\Python\PythonXX\Scripts \test_apply Et vérifier qu’il fonctionne bien en tapant localhost :8000 comme url dans votre moteur de recherche Cependant, avant de suivre les conseils de Django et de commencer à travailler, vous allez devoir configurer votre projet. Editez donc le fichier settings.py avec votre éditeur favoris (Scripts\$nom_du_projet$\$nom_du_projet$\settings.py) 5/ Nicolas.F Ce qu’il faut savoir sur le contenu de ce fichier : La variable BASE_DIR indique un chemin au sein du projet, dans le cas présent il s’agit de settings.py, elle pourra être utilisé plus tard dans vos vues. La variable Debug indique si oui ou non votre site est en mode Debug,les informations qui seront alors affichés lorsque vous souhaiterez accéder à votre page peuvent être importantes à la sécurité de votre projet. Essayez donc de laisser Debug=false lorsque vous laissez votre site en libre accès. Django possède une librairie de Base de données, ainsi il gère très bien les bases de données de tout type. Il vous suffira de modifier votre fonction comme ceci : Et vous pourrez rajouter quelques modifications : Pensez ensuite à modifier la langue de votre projet (ce n’est pas obligatoire) : LANGUAGE_CODE = 'en-us' en LANGUAGE_CODE = 'fr-FR' Suite à ces paramétrages, vous pourrez créer la première application de votre projet. 6/ Nicolas.F Premièrement, placez-vous à nouveau dans le dossier de manage.py via l’invite de commande puis entrez cette commande : manage.py startapp $nom_de_votre_application$ La structure de votre projet ressemblera ensuite à ceci : $nom_de_votre_projet$/ $nom_de_votre_application$/ __init__.py admin.py migrations/ __init__.py models.py tests.py views.py $nom_de_votre_projet$/ __init__.py settings.py urls.py wsgi.py db.sqlite3 manage.py Ce qu’il faut savoir sur votre application : views.py contiendra toutes les vues de votre application. models.py contiendra vos modèles admin.py va permettre de définir ce que souhaitez afficher et modifier dans l'administration de l'application Avant de modifier vos vues, vous devrez ajouter votre application dans les paramètres pour que Django le considère bien comme une application. 7/ Nicolas.F Votre application pourra contenir plusieurs vues que vous pourrez ajouter par la suite dans le but de remplir divers fonctions. Gestion de votre vue : Allez dans la vue que Django à généré (Scripts\$nom_de_votre_projet $\ $nom_de_votre_application$\views.py Par mesure de sécurité, vérifiez bien que l’encodage de votre vue est en UTF8 Ce que contient ce code : L’import de la fonction HttpResponse du module dhango.http, cette classe vous permettra de retourner une réponse depuis une chaîne de caractères. Il s’agit d’une fonction propre à Django qui permet d’encapsuler votre réponse afin de mieux la traiter. Une fonction home qui reçoit en argument : « request », il contient simplement des informations sur la méthode de la requête (GET,POST) Une chaîne de caractère nommée text qui est une des instances de HttpRequest Toutes les fonctions prendront comme premier argument un objet du type HttpRequest. Toutes les vues doivent forcément retourner une instance de HttpResponse, sans quoi Django générera une erreur. Votre vue ne s’affichera pas encore tout de suite sur votre suite puisqu’elle n’est pas encore reliée à celui-ci, pour cela vous aurez besoin de urls.py qui se situe ici : Scripts\$nom_de_votre_projet $\$nom_de_votre_projet $\urls.py 8/ Nicolas.F La liste urlpatterns, permet de définir les associations entre URL et vues, la ligne 20 dans urlpatterns est composée des éléments suivant : 1. Le schéma de l'URL : une URL peut être composée d'arguments qui permettent par la suite de retrouver des informations dans les modèles 2. Le chemin Python vers la vue correspondante. 1. r’^accueil$’ permet de définir la racine de votre site web, si vous laissez l’url vide comme ça : r’^$’, la racine aurait été : http://votre_projet.com/ au lieu de : http://votre_projet.com/accueil 2. Le second argument de l’url doit être votre vue soit la fonction home situé dans views.py, cet argument est accessible grâce à l’import des vues depuis votre application (from $le_nom_de_votre_application$ import views) Enregistrez-bien vos modifications et lancez le serveur de Django comme fait précédemment, accédez à votre site via localhost :8000 et admirez le contenu ! Cependant, ce n’était qu’un aperçu des capacités de Django. En effet, vous pouvez (et devrez) structurer vos urls par le bien d’un autre fichier urls. Cela permettra notamment lorsque vous aurez plusieurs applications d’avoir un fichier url propre à chacune d’entre elles. Ainsi, votre projet sera structuré. 9/ Nicolas.F Structuration Pour structurer vos urls, vous devrez créer un second fichier urls dans votre application, vérifiez bien que vous l’avez mis en extension .py pour que python puisse gérer ce fichier. Dans ce fichier url, vous ajouterez from django.conf.urls import patterns, url urlpatterns = patterns('', url(r'^accueil$', 'blog.views.home'), ) Et dans votre autre fichier url, ajoutez : from django.conf.urls import url from blog import views urlpatterns = [ url(r'^blog/', include('blog.urls')) ] 10/ Nicolas.F Il est possible que le lien ne fonctionne pas car cela dépendra de la génération de votre projet et de votre application. Fin Cours 11/ Nicolas.F