Developpez Vos Applications Web Avec Django
Developpez Vos Applications Web Avec Django
Developpez Vos Applications Web Avec Django
www.siteduzero.com
2/29
Sommaire
Sommaire ........................................................................................................................................... Lire aussi ............................................................................................................................................ Dveloppez vos applications web avec Django ................................................................................. Partie 1 : Pour bien dmarrer... ...........................................................................................................
Kzako ? ..................................................................................................................................................................................................................... Les sites internet statiques .......................................................................................................................................................................................... Les sites internet dynamiques ..................................................................................................................................................................................... La programmation MVC .............................................................................................................................................................................................. Comment a marche ? ................................................................................................................................................................................................ Concrtement, comment a marche ? ........................................................................................................................................................................ Les bases de donnes ................................................................................................................................................................................................
2 1 3 3
4 4 4 5 5 5 6
www.siteduzero.com
Sommaire
3/29
Par
Natim et
Cam
Vous tes attir par le dveloppement internet ? Vous ne savez pas comment crer un site internet ? Vous connaissez Python et aimeriez bien dvelopper vos sites avec ? Django !
Bonjour vous, ami zro. Si vous tes ici par rapport l'une des questions ci-dessus ou bien par simple curiosit, je peux vous promettre que vous ne le regretterez pas. Qu'allons-nous apprendre ? Le dveloppement web dynamique ou bien, en d'autres termes, crer votre site internet complet. Qu'est-ce que Django ? A quoi sert-il ? ... Toutes les rponses sont dans ce cours. Pour bien le comprendre, vous devez au pralable connatre : Les langages (X)HTML et CSS un bon tutoriel est prsent sur le site Python un tutoriel est aussi disponible sur le site Ce cours se portera sur la version 1.2 de Django. Si Django est dj install sur votre machine, vrifiez bien la version (cf: Installation de Django)
www.siteduzero.com
4/29
Le dveloppement web
Qu'est-ce que le dveloppement web dynamique ? A quoi sert-il ? Comment et avec quoi se fait-il ? Nous allons voir tout a dans ce chapitre.
Kzako ?
Un site web, c'est avant tout des fichiers (HTML, CSS, javascript, ...) qui sont rcuprs puis traits par un navigateur. Lorsqu'on dveloppe pour le web, on choisit de mettre en ligne du contenu sur Internet. Le rsultat est appel un site internet. On distingue deux types de sites web : Les sites internet statiques Les sites internet dynamiques
La base de donnes
Pour raliser un site internet dynamique, il va falloir stocker les donnes utilisateurs dans une base de donnes. On va donc raliser un modle de donnes qui va accueillir nos donnes. On appelle cela la partie Modle.
www.siteduzero.com
5/29
Lorsque vous parlez de Bases de donnes n'oubliez pas de mettre un S donnes sans quoi ce n'est plus une base de donnes
L'Interface Homme-Machine
Afin de prsenter l'information de manire efficace, jolie, accueillante et ergonomique, on va crer un design de notre site. Ces fichiers HTML prpars accueillir le contenu du site s'appellent des Templates ou Gabarits .
Le programme
Ensuite, il va falloir un programme qui va rcuprer les informations de la base de donnes ainsi qu'en ajouter de nouvelles et les prsenter dans les gabarits dfinis.
La programmation MVC
Ce type de programmation (design pattern en anglais) s'appelle la programmation MVC : Modle, Vue, Contrleur. Le modle explique la manire dont nos donnes sont reprsentes. La vue explique comment les donnes sont affiches. Le contrleur explique comment les donnes sont rcupres dans les modles pour tre affiches.
Comment a marche ?
Le dveloppement web, ce n'est pas automatique, vous devez taper des lignes de code pour avoir ce que vous souhaitez (ou bien utiliser des codes dj prts). Python n'est pas dvelopp uniquement pour raliser de programmes web. Il ne suffit pas d'crire du Python au milieu d'un fichier HTML comme c'est le cas avec PHP ou JSP. Pour connecter notre code Python un serveur web qui va rpondre aux requtes des navigateurs, on devrait utiliser la norme CGI qui permet tout programme de retourner des pages web. V oici quoi ressemblent les standards CGI. Code : Python - Listing 1.1 Exemple de code proposant les standards CGI #!/usr/bin/python import MySQLdb print print print print print print "Content-Type: text/html" "<html><head><title>Livres</title></head>" "<body>" "<h1>Livres</h1>" "<ul>"
connection = MySQLdb.connect(user='moi', passwd='laissezmoientrer', db='ma_base') cursor = connection.cursor() cursor.execute("SELECT nom FROM livres ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall(): print "<li>%s</li>" % row[0] print "</ul>" print "</body></html>" connection.close()
6/29
Le Web c'est une simple application de type client/serveur. V oici un petit schma simple pour expliquer autrement que par les mots.
Il y a donc un client (le navigateur install sur votre ordinateur) qui demande une ressource (fichier) un serveur. Dans le cas du listing 1.1, on rcupre dans une base de donnes une liste de livres tris par date de publication et on gnre un fichier HTML qui est ensuite retourn au navigateur de l'utilisateur.
On voit donc que l'on va crer des relations entre nos donnes les commentaires de tel article ... On va donc utiliser des Base de Donnes Relationnelles. Une BDD relationnelle est compose de tables et de donnes . Les tables sont un ensemble d'information caractrisant un objet. Un utilisateur ou un article par exemple, ou bien les catgories de votre blog, les news de votre site. La table regroupe la liste exhaustive de toutes les informations que l'on souhaite conserver propos d'un objet. On peut s'imaginer un formulaire d'inscription, on va nous demander notre nom, prnom, adresse ... toutes ces informations sont des champs de notre table qui caractrisent une personne. Les donnes viennent se ranger dans ces les champs de la table pour les conserver de manire ordonne (vous imaginiez srieusement si toutes vos donnes taient ranges en vrac dans une seule grosse bote ? Elles seraient inutilisable !). V oici un petit exemple simple d'une table contenant ses propres donnes (faon BDD) : ID USERNAME INSTRUMENT 1 2 3 Cam Natim Cyril Batteur Saxophone Basse
www.siteduzero.com
7/29
C'est beau de rver, non ? Bref. En plus clair : nous avons notre table membre qui va contenir toutes nos donnes en rapport avec les membres. Ici, Cam, Natim et Cyril sont les noms d'utilisateurs : ce sont les donnes d'un champ qu'on peut appeler username. Batteur, Saxophone et Basse sont les instruments que pratiquent les trois membres prsents dans la base de donnes. Organis de telle sorte, Natim ne peut pas tre batteur tant donn qu'il est guitariste, etc. Le troisime champ est trs important dans ce schma : c'est l'identifiant unique. Les id permettent de rfrencer un objet plus facilement. C'est--dire qu'ici, Cam a pour id 1, Natim 2 et Cyril 3. Si nous ne les avions pas, nous ne pourrions pas les modifier. Imaginons que Cam joue de la Batterie et de la Guitare. Si nous souhaitions modifier son instrument sans identifiant unique nous ne pourrions pas dire de quelle fiche nous souhaitons modifier l'instrument. En gros une table est un tableau dont les colonnes sont dfinies et chaque ligne correspond un objet dont les colonnes sont les caractristiques. On peut aussi dire qu'une table dfinit la structure d'une fiche et qu'on cre une fiche chaque fois qu'on parle d'un objet avec les renseignements correspondants sur cette fiche.
www.siteduzero.com
8/29
Pourquoi Django ?
Le nom Django a t donn en souvenir de Django Reinhardt, guitariste jazz ayant vcu de 1910 1953. Il est considr comme le meilleur guitariste manouche de tous les temps. Cet homme a beaucoup chang notre vision du jazz, et nous ne pouvons que l'en remercier. Pour plus d'informations sur Django et ses origines, je vous redirige sur la FAQ officielle du projet.
Pourquoi l'utiliser ?
Remarque Si vous n'arrivez pas vraiment suivre ce sous-chapitre, ce n'est pas trs grave : imprgnez-vous simplement du vocabulaire qui vous sera expliqu et dvelopp en temps voulu.
www.siteduzero.com
9/29
Mais encore ?
V oyons concrtement ce que Django apporte et profitons-en pour dfinir quelques termes. Pour commencer, reprenons notre code CGI (listing 1.1) : Code : Python - Page internet reposant sur les standards CGI #!/usr/bin/python import MySQLdb print print print print print print "Content-Type: text/html" "<html><head><title>Livres</title></head>" "<body>" "<h1>Livres</h1>" "<ul>"
connection = MySQLdb.connect(user='moi', passwd='laissezmoientrer', db='ma_base') cursor = connection.cursor() cursor.execute("SELECT nom FROM livres ORDER BY pub_date DESC LIMIT 10") for row in cursor.fetchall(): print "<li>%s</li>" % row[0] print "</ul>" print "</body></html>" connection.close()
On dfinit, dans un premier temps, le type de fichier gnr, puis on affiche du code HTML, on rcupre ensuite des informations sur des livres contenus dans une base de donnes, on r-affiche du HTML, et on ferme notre connexion la base de donnes. Pour une page simple comme celle-ci, cette approche aise peut convenir, mais lorsque l'application grossit, il devient de plus en plus compliqu de la maintenir. V oyons comment nous aurions crit cette page en utilisant Django. Il faut noter que nous avons spar notre fichier en trois fichiers Python (models.py, views.py et urls.py) et un gabarit HTML (derniers_livres.html).
www.siteduzero.com
10/29
Code : Python - ~/views.py # views.py (la logique mtier) from django.shortcuts import render_to_response from models import Livre def derniers_livres(request): liste_livres = Livre.objects.order_by('-date_publication')[:10] return render_to_response('derniers_livres.html', {'liste_livres': liste_livres})
Code : Python - ~/urls.py # urls.py (la configuration de l'URL) from django.conf.urls.defaults import * urlpatterns = patterns('', (r'derniers/$', app.views.derniers_livres), )
Code : HTML - ~/templates/derniers_livres.html <!-- derniers_livres.html (le gabarit) --> <ul> {% for livre in liste_livres %} <li>{{ livre.nom }}</li> {% endfor %} </ul>
Ne vous proccupez pas pour le moment de savoir comment cela fonctionne, je prendrai bien soin de vous l'expliquer. Ce qu'il faut noter ici, c'est la rpartition du code selon son objet : Le fichier models.py dcrit la table pour stocker les donnes sous la forme d'une classe Python. Cette classe est appele modle. Le fichier views.py contient la logique de la page, sous la forme de la fonction Python derniers_livres. Cette fonction est appele vue. Le fichier urls.py dfinit quelle vue sera appele pour un modle d'URL donn. Dans notre cas, derniers/ sera trait par la fonction derniers_livres. Le fichier derniers_livres.html est un gabarit HTML dfinissant l'aspect de la page. On l'appellera un template. On nommera cette organisation de projet le MTV, proche parent du MVC.
www.siteduzero.com
11/29
Tlchargement et installation
L'installation du framework requiert certains programmes qui seront indispensables son fonctionnement : Python ; Python Imaging Library ; gestionnaire de base(s) de donnes (MySQL, SQLite, PostgreSQL, ...). Pour ce tutoriel, et au niveau de la base de donnes, nous allons nous rfrer une base SQLite qui est la plus facile mettre en place, mais rien ne vous empche d'installer une base MySQL ou Oracle pour votre application.
Debian et drivs
Nous allons installer nos trois programmes cits en introduction ce chapitre. Code : Console $ sudo apt-get install python python-imaging python-pysqlite2 sqlite3
Ensuite, nous allons rcuprer la dernire version de Django. Code : Console $ $ $ $ cd ~/Tlchargements/ tar zxf Django-1.2.5.tar.gz cd Django-1.2.5 sudo python setup.py install
Remarque l'heure actuelle, Django n'est pas disponible en version 1.2.5 dans les paquets Ubuntu. V ous pourrez cependant l'installer via ce biais ds qu'il fera son apparition sur les dpts avec $ sudo apt-get install pythondjango .
Mac OS X
Python et SQLite3 sont dj prsents, vous pouvez utiliser easy_install pour installer pysqlite2 : Code : Console $ sudo easy_install pysqlite
Pour installer PIL, vous aurez besoin du kit de dveloppement Mac OS X qui se trouve sur le DVD d'installation dans le rpertoire Developer Tools. PIL ayant besoin de pouvoir lire les fichiers .jpeg, il vous faudra compiler libjpeg (tlcharger la dernire version). Ensuite, il faut extraire, configurer et compiler : Code : Console $ $ $ $ $ $ tar zxf jpegsrc.v6b.tar.gz cd jpeg-6b cp /usr/share/libtool/config/config.sub . cp /usr/share/libtool/config/config.guess . ./configure --enable-shared --enable-static make
www.siteduzero.com
12/29
$ $ $ $
V ous pouvez utiliser pip pour installer Imaging. Code : Console $ sudo easy_install pip $ sudo pip install http://effbot.org/downloads/Imaging-1.1.7.tar.gz
Enfin, nous allons rcuprer la dernire version de Django. Code : Console $ $ $ $ cd ~/Downloads/ tar zxf Django-1.2.5.tar.gz cd Django-1.2.5 sudo python setup.py install
Windows
Il existe plusieurs faons d'installer Django sous Windows, mais, la base, cet OS n'est pas fait pour a. Je vais donc vous montrer la mthode la plus simple. Ce n'est pas aussi vident que sous Unix. V ous devez dj installer Python. Tlchargez ensuite Django 1.2.5 et extrayez-le. Un dossier Django-1.2.5 s'est cr. Une fois ceci effectu, nous allons modifier les variables d'environnement systme : Touche Windows + Pause > Paramtres systme avancs -> Variables d'environnement. Ensuite, cherchez la variable systme Path et ajoutez ceci en fin de ligne (faites attention votre version de Python) : Code : Console ;C:\Python27;C:\Python27\Lib\site-packages\django\bin
Utilisons maintenant la bonne vieille console Windows. Ouvrez cette dernire via : cmd , rendez-vous dans votre dossier Django, puis : Code : Console $ cd chemin\vers\django $ python setup.py install
Ne prenez pas peur, il est normal que toutes ces lignes s'affichent. Attention Veillez ce que tous les fichiers .py s'ouvrent avec Python et non pas un autre logiciel, sinon vous ne pourrez rien en faire. Dans le cas contraire, il faut chaque fois ajouter python devant vos commandes. Django est maintenant install. SQLite est par dfaut install avec Python. Je vous laisse installer PIL par vous-mmes.
Vrification
Pour vrifier l'installation, vous pouvez lancer une console Python et tester : Code : Python
www.siteduzero.com
13/29
Ce tuto tant destin Django 1.2, vrifiez que vous possdez bien une version 1.2 de Django. Sinon, les numros de version peuvent tre diffrents, le tout est de ne pas avoir d'erreur. V ous tes fin prts pour crer votre premier projet !
www.siteduzero.com
14/29
L'architecture du projet
Rien de bien compliqu ici ; la seule chose connatre est le nom du projet. Nous allons l'appeler tuto_sdz , mais vous pouvez bien sr changer. V oici la ligne de commande permettant de crer notre projet : Les noms de vos projets ne doivent tre compos que de lettres, chiffres et underscores. De plus, vous ne devez pas nommer votre projet comme l'un des dossiers prsents dans le dossier d'excution du fichier django-admin.py. Code : Console django-admin.py startproject tuto_sdz
V ous devriez maintenant voir un rpertoire tuto_sdz contenant quelques fichiers. Code : Console ls tuto_sdz/ __init__.py manage.py settings.py urls.py
__init__.py : Il s'agit d'un fichier juste qui dfinit le rpertoire comme tant un module Python. Tous vos rpertoires contenant du code Python que vous souhaitez charger depuis d'autres fichiers Python, doivent contenir ce fichier mme s'il est vide. manage.py : Ce fichier nous permet de faire des actions dfinies sur notre projet Django. Nous verrons son fonctionnement ci-dessous. settings.py : C'est le fichier de configuration de notre projet. Il est, en grande partie, spcifique une machine. Attention : ce fichier est confidentiel et ne doit pas tre diffus avec votre projet. urls.py : Ce fichier est, comme son nom l'indique, destin recevoir les modles d'URL que nous dfinirons. V ous pouvez y jeter un coup d'il, mais les lignes y sont pour le moment commentes et nous l'tudierons plus en dtail dans un instant.
www.siteduzero.com
15/29
Type 'manage.py help <subcommand>' for help on a specific subcommand. Available subcommands: changepassword cleanup compilemessages createcachetable createsuperuser dbshell diffsettings dumpdata flush inspectdb loaddata makemessages reset runfcgi runserver shell sql sqlall sqlclear sqlcustom sqlflush sqlindexes sqlinitialdata sqlreset sqlsequencereset startapp syncdb test testserver validate
Si vous souhaitez encore plus d'informations, il vous suffit de mettre le nom de la commande aprs le help. Code : Console $ python manage.py help cleanup Usage: manage.py cleanup [options]
Can be run as a cronjob or directly to clean out old data from the database (only expired [...]
On verra par la suite qu'on peut galement ajouter nous-mmes nos commandes manage.py, ou bien que des modules externes le font pour nous.
www.siteduzero.com
16/29
V ous pouvez essayer directement : http://127.0.0.1:8000/. Notez que, sans argument, le serveur se lance en mode de dveloppement et n'est accessible, par scurit, que sur la boucle locale (IP 127.0.0.1). En aucun cas, vous ne devez utiliser ce serveur en production. Nous verrons plus loin comment faire pour configurer Django en production. Si vous souhaitez changer le port du serveur (pour lancer plusieurs projets Django, par exemple), vous pouvez faire comme ceci : Code : Console $ python manage.py runserver 8080
Si vous souhaitez accder au serveur de dveloppement depuis votre rseau local : Code : Console $ python manage.py runserver 192.168.0.0:8000
Ou mme comme cela, pour ne pas filtrer les adresses IP autorises : Code : Console $ manage.py runserver 0.0.0.0:8000
Les paramtres
Le fichier settings.py va contenir les informations de connexion la base de donnes, le salt qui permet de scuriser les clefs de hashage MD5 ou SHA1 par exemple. V ous allez galement y entrer votre adresse e-mail. Il y a les tuples ADMINS et MANAGERS. Gnralement, ADMINS est utilis pour les erreurs et MANAGERS pour les fonctionnalits (alerte d'un nouveau message dans le livre d'or par exemple). Je vous propose de remplir le fichier settings comme suit. vous qui, comme tout programmeur tranger, placez des accents partout, il y a deux rgles en Python 2.* que je souhaite vous rappeler. Codez en utf-8 en mettant # -*- coding: utf-8 -*- au dbut de tous vos fichiers. Si vous utilisez les chanes de caractres, mettez-les en Unicode comme cela : chaine = u'Je suis un chane de caractres'. Si vous respectez ces deux rgles, vous ne devriez pas avoir de problmes d'encodage dans vos codes.
Code : Python # -*- coding: utf-8 -*# Django settings for tuto_sdz project. DEBUG = True TEMPLATE_DEBUG = DEBUG ADMINS = ( (u'Cyril Mizzi', '[email protected]'), (u'Natim', '[email protected]'), (u'Cam', '[email protected]') ) MANAGERS = ADMINS DATABASES = {
www.siteduzero.com
17/29
www.siteduzero.com
18/29
Si vous avez bien suivi, nous devons crer deux rpertoires : l'un, medias, pour les fichiers statiques de notre design : css, images,... l'autre, templates, pour les templates HTML. Si vous ne savez pas ce que sont les templates, nous le verrons trs bientt, pas d'inquitude. Comme vous le voyez, ce fichier contient des informations confidentielles, les informations de connexion, et le salt. Ici, avec sqlite3, ce n'est pas trs dangereux, mais avec une autre base de donnes, on peut laisser traner des mots de passe. Attention Je le rpte, ce fichier est confidentiel , veillez ne pas le distribuer avec vos sources. Gnralement, nous faisons une copie settings.py.example qui, elle, est livre titre d'exemple avec le projet, et dont on supprime les informations confidentielles. De plus, cela vite d'craser le fichier settings.py spcifique d'une installation lors de la mise jour du projet. Gardez votre salt, il a t gnr automatiquement. Si vous souhaitez le gnrer nouveau : Code : Python from random import choice print ''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(_=+)') for i in range(50)])
V ous avez ainsi un salt tout neuf pour votre site en production, par exemple.
Dans un dpt, n'oubliez pas de configurer votre VCS pour viter qu'il prenne en compte votre fichier settings.py
www.siteduzero.com
19/29
Le fonctionnement est strictement le mme que la commande startproject (qui nous a permis de crer notre premier projet) : le dernier argument est le nom de votre application. Je vous conseille de choisir un nom d'application au pluriel, vous verrez pourquoi dans les prochains chapitres. C'est une sorte de convention lorsque l'on utilise un framework web comme Django.
www.siteduzero.com
20/29
Maintenant que notre premier modle est dclar, il va falloir le remplir. Chaque modle est constitu de champs et de fonctions. Les champs sont videmment la base des modles, alors que les fonctions permettent de gagner du temps en vitant de rcrire plusieurs fois le mme code. Notre modle Sondage doit contenir les champs question et date de publication . Quant notre modle Reponse , les champs sondage , choix et nombre de votes doivent tre inclus. En langage Django, a donne ceci : Code : Python class Sondage(models.Model): question = models.CharField(max_length=200) date_publication = models.DateTimeField() class Reponse(models.Model): sondage = models.ForeignKey(Sondage) choix = models.CharField(max_length=200) nb_votes = models.IntegerField()
Nous venons de dclarer dans nos deux classes les champs des modles. Chaque champ a un nom, un type et d'ventuelles options. Les types de champs CharField et IntegerField correspondent respectivement un champ de texte et un champ entier. ForeignKey, lui, est une relation avec un modle (c'est lui qui va faire la relation entre le modle Sondage et Reponse ). Mais ne nous ternisons pas l-dessus, nous aborderons la liste complte des champs et relations supports par Django au dbut de la deuxime partie. Quant aux options, max_length=200 dans l'exemple, elles permettent de personnaliser un peu plus nos champs. On pourra par exemple dfinir sa longueur, sa valeur par dfaut, et j'en passe.
tuto_sdz et sondages dans le code prcdent correspondent respectivement au nom du projet et au nom de l'application. Ce premier n'est pas obligatoire mais signifie que l'application est dans le dossier de notre projet. Si on ne le prcise pas, le programme ira chercher l'application dans notre python path.
www.siteduzero.com
21/29
On va vous demander si vous souhaitez crer un compte super-admin, dites oui / yes . Cela nous permettra par la suite de grer nos sondages dans l'administration gnre par Django. N'oubliez pas non plus de choisir un pseudo, une adresse e-mail et un mot de passe (ce dernier ne s'affiche pas par raison de scurit). Cela doit donner quelque chose comme a : Code : Console Creating Creating Creating Creating Creating Creating Creating Creating Creating Creating Creating Creating table table table table table table table table table table table table auth_permission auth_group_permissions auth_group auth_user_user_permissions auth_user_groups auth_user auth_message django_content_type django_session django_site sondages_sondage sondages_reponse
You just installed Django's auth system, which means you don't have any superusers define Would you like to create one now? (yes/no): yes Username (Leave blank to use 'camille'): Cam E-mail address: [email protected] Password: Password (again): Superuser created successfully.
www.siteduzero.com
22/29
Les tables requises au bon fonctionnement du framework et celles de notre application ont bien t cres !
www.siteduzero.com
23/29
Information savoir La fonction doit toujours avoir comme argument premier request, c'est obligatoire. Ce sont toutes les donnes envoyes la vue. Une fonction doit aussi toujours retourner quelque chose. Dans notre cas, nous allons lui retourner True . Si votre fonction ne retourne rien, vous allez vous retrouver avec une belle erreur Django.
Nous n'allons pas de suite voir comment afficher des informations car nous devons d'abord voir les URLs. Cela tant, nous pouvons toujours apprendre grer le contenu de nos vues.
www.siteduzero.com
24/29
Un objet, c'est un retour de donnes rcupr du modle. En gros, lorsque vous allez faire une requte pour rcuprer les derniers sondages, le retour de cette requte sera ce qu'on appelle : un objet. Bah tiens, pourquoi ne pas effectuer une petite requte pour rcuprer tous les sondages prsents ? Comment a marche tout a ? En Python, vous devez savoir qu'il faut importer des donnes pour pouvoir les utiliser dans notre fichier. Dans notre cas, tant donn que nous souhaitons rcuprer les donnes de nos deux modles (le sondage, et ses rponses), il faut le prciser comme ceci : Code : Python # module = nom du module (sondages, pour nous) # model = dfinition d'un modle (Sondage) # model1 = dfinition d'un modle (Rponses) from module.models import model, model1
Nous aurons donc : Code : Python from sondages.models import Sondage, Reponse
Ces bouts de codes sont trs simple : dans notre application et les modles lis, nous importons dans notre fichier courant les deux modles crs (on peut aussi faire from sondages.models import * , mais c'est moins pratique). Dans notre fonction, nous souhaitons rcuprer tous les sondages. Nous devons donc faire une requte Django : Code : Python def homepage(request): list_sondages = Sondage.objects.all() return True
Ne prenez pas peur de suite, c'est trs simple : dans notre variable list_sondages , nous allons retourner des objets (voil, ce sont nos fameux objets). Ca marche trs simplement. En franais, a veut dire : dans le modle Sondages, retourne moi tous les objets. Pour le moment, rien ne va s'afficher, normalement, nous n'avons rien configur au niveau des templates. De plus, rien ne s'affiche car nous ne retournons qu'une valeur boolenne. Si vous cherchez retourner la variable et que vous affichez le tout, vous allez vous retrouver avec un retour Django et non pas des affichages comme on le voudrait. Nous allons en rester l pour la requte de la fonction. Il va maintenant falloir retourner le tout.
www.siteduzero.com
25/29
V oici les diffrents paramtres dont nous allons nous servir : Code : Python render_to_response(template_name, list_variables)
Pour nous, cela va se faire trs simplement : Code : Python def homepage(request): list_sondages = Sondage.objects.all() return render_to_response('sondages/homepage.html', { 'list_sondages': list_sondages })
En gros, cela dit d'utiliser le gabarit se trouvant dans le dossier templates - dfinit dans le fichier de configuration du projet (TEMPLATE_DIRS) - le fichier homepage.html qui se trouve dans le sous-dossier sondages, soit, dans notre cas : /home/natim/projets-django/tuto_sdz/templates/sondages/homepage.html. V ous pouvez faire passer d'autres variables comme a : Code : Python def homepage(request): list_sondages = Sondage.objects.all() return render_to_response('sondages/homepage.html', { 'list_sondages': list_sondages, 'page_title': 'Accueil des sondages' })
Le gestionnaire d'URLs
Les URLs sont trs importantes dans votre projet. C'est vous de les faire de toute pice. Concrtement, elles ne sont pas compliques manipuler mais il faut connatre leur fonctionnement. Si vous ouvrez le fichier urls.py, vous allez avoir quelques exemples du fonctionnement de vos URLs. En ralit, ce que nous allons faire sera quelque peu diffrents : nous allons utiliser les expressions rgulires et manipuler les vues. Pour faire simple : une vue est relie une ou plusieurs URLs, mais une URL ne peut pas tre relie plusieurs vue. Code : Python from django.conf.urls.defaults import * # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover() urlpatterns = patterns('', # Example: # (r'^tuto_sdz/', include('tuto_sdz.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # (r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)),
www.siteduzero.com
26/29
Nous verrons plus tard quoi corresponde la plupart des lignes commentes (elles sont en rapport avec l'administration). Pour l'instant, nous allons simplement nous occuper de la variable urlpatterns. Code : Autre urlpatterns = patterns('', )
Cette variable va devoir contenir toutes nos URLs. Nous verrons plus en dtails plus tard que nous pouvons dcouper la variable ainsi que la mettre dans diffrents fichiers mais nous allons rester primaire pour le dbut. Si vous connaissez vos expressions rgulires, vous devriez comprendre ceci (ou partiellement) : Code : Python from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^sondages/$', 'sondages.views.homepage') )
La premier chane de caractres est notre URL sous forme d'expression rgulire. La deuxime, le module et la vue sur lesquels nous souhaitons pointer l'URL. Srieusement, vous trouvez a compliqu ? Chaque ligne correspond une nouvelle URL. Chaque URL pointe vers une seule vue dfinie comme ci-dessus. Simple comme Bonjour !
Les gabarits
Les gabarits... Quelles choses fantastiques ! V ous savez que Django fonctionne avec des templates (je vous le rabche depuis le dbut), et ces templates sont grs par le moteur de templates. Donc, comme dans tout gabarit, il faut savoir afficher et trier les informations au sein-mme de l'affichage. Continuons sur notre lanc pour notre application. Nous avons deux variables envoyes la vue : page_title et list_sondages. Ces deux variables, nous devons les utiliser. Crer un dossier sondages dans votre dossier de templates et, l'intrieur, dfinissez le fichier homepage.html.
Le systme de tags
Comme dans tout moteur de templates, vous avez diffrents tags qui permettent d'avoir des conditions, des dfinitions, et le plus important : afficher le contenu de variables. Pour afficher justement le contenu d'une variable, vous devez utiliser {{ var }}. Dans notre exemple, si vous insrez {{ page_title }}, vous verrez d'affich : Accueil des sondages sur cette url : http://127.0.0.1:8000/sondages. Dans Django, il existe deux syntaxes templates : {{ }} et {% %}. Lesquels utiliser ? C'est trs simple, vous n'avez pas le choix. Lorsque vous devez afficher une variable, ce sera toujours le premier type. Ds que vous allez devoir faire des oprations plus complexes comme les conditions et les boucles, vous devrez utiliser les deuximes. V oici un exemple basique de condition sous Django : Code : HTML Bonjour {% if not username %} visiteurs {% else %} {{ username }} {% endif %}.
En plus dcortiqu et plus pos, vous avez ceci : Code : HTML Bonjour
www.siteduzero.com
27/29
V oici les deux tags que nous utiliserons le plus et que vous devez imprativement savoir. Condition : ralise des tests sur des variables Code : HTML {% if condition %} Si vraie {% else %} Si faux {% endif %}
Boucle : retourne les valeurs d'un objet ou d'un tableau de donnes. Code : HTML {% for content in profils %} <!-- Ici, le tableau est profils et les valeurs sont stockes dans content --> {{ content.name }} {{ content.lastname }} {{ content.age }} {% empty %} Aucun utilisateur n'est rfrenc. {% endfor %}
Les filtres
Nous en parlons maintenant mais ils ne vous serviront pas tant que a. Sachez simplement qu'un filtre est un attribut qu'on peut ajouter sur une variable pour lui ajouter des effets comme tronquer le contenu 100 mots, ou bien crire le tout en majuscule, en minuscule... Bref, il y a de quoi faire. V ous les dcouvrirez tout au long de ce cours.
La suite
Le cours continue ici : http://django-story.rtfd.org/. Nous recherchons une personne pour maintenir la version sdz de django-story.
En attendant une suite ce cours, nous pouvons vous suggrer certaines lectures cursives :
Sur Django
Attention Lorsque vous lisez un tutoriel sur Django, assurez-vous qu'il s'agisse bien de la version de Django que vous utilisez. Django Project - La documentation officielle Le Django Book.
www.siteduzero.com
28/29
Sur Python
Apprendre programmer avec Python Dive into Python
(X)HTML
XHTML/CSS Le site du World Wide Web Consortium
www.siteduzero.com