Django Tps
Django Tps
Django Tps
TP 1
09/04/2013 Lobjet de ce TP est la dcouverte du framework web Django et la familiarisation avec ses concepts de base. Laccent est mis sur laptitude congurer son environnement de travail sous UNIX et crer rapidement une application web fonctionnelle laide du framework. Documents : Cours : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/cours/django.html nonc du TP : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/tps/html/index.html Documentation ofcielle : https ://docs.djangoproject.com Contact cours/TPs : Mathias Monnerville, mathias.monnerville@univ-montp2.fr
Ce script cre un rpertoire $HOME/local et un lien symbolique vers Python 2.7. Il modie votre $PATH an que lxcution de la commande python dans le terminal lance la version 2.7. Pour que les changements soient pris en compte immdiatement, se dconnecter en fermant sa session ou bien forcer la prise en compte de la nouvelle conguration dans le terminal courant avec :
$ source ~/.bash_profile
2. Crer un rpertoire django qui comprendra le code source des projets tudis en scance de TP :
Enn, vrier que Django est correctement install en rcuprant son numro de version :
$ python -c "import django; print django.get_version()" 1.5.1
(a) Quelle est lutilit du script manage.py ? (b) Quel est le rle du cher settings.py ? 3. Lancer manage.py avec la sous-commande runserver pour dmarrer le serveur de dveloppement sur le port 8000. Visiter la page par dfaut en faisant pointer votre navigateur sur http://localhost:8000. 4. Crer une nouvelle application world dans ce projet avec la sous-commande startapp de manage.py. Le contenu du rpertoire du projet doit ressembler :
+-| | | | +-+--
hello +-- __init__.py +-- settings.py +-- urls.py +-- wsgi.py manage.py world +-- __init__.py +-- models.py +-- tests.py +-- views.py
5. Activer cette nouvelle application en modiant le chier hello/settings.py pour que la variable INSTALLED_APPS (qui est un tuple) contienne lentre :
INSTALLED_APP = ( ... world, )
6. Changer la page daccueil du site en (a) ajoutant une entre dans la variable urlpatterns du chier hello/urls.py de manire router les requtes destination de / (GET /) vers une vue nomme home (b) Implmentant une fonction def home(request) dans le chier world/views.py qui retourne un objet django.http.HttpResponse ayant pour paramtre la chane de caractres Hello, world ! 7. Ajouter une entre dans urlpatterns pour que lon puisse spcier un nom en minuscules dans lurl et implmenter une fonction hello() dans views.py qui retourne un objet HttpResponse de la forme :
return HttpResponse("Hello, <b>%s</b>!" % name)
<html> <head><title>Hello !</title></head> <body> <h1 style="text-align: center;">Accueil</h1> <p>Bonjour {{ nom }} !</p> <p>Nous sommes le {{ date }}.</p> <p style="color: #00f;"> trs bientt.</p> <!-- footer --> <hr/> <div style="font-size: 10px;">Message daccueil gnr automatiquement.</div> </body> </html>
2. Modier la fonction hello() dans world/views.py de manire utiliser la fonction render_to_response() du package django.shortcuts. La fonction render_to_response() doit utiliser un dictionnaire Python contenant une clef nom dont la valeur sera passe au moteur de rendu du template HTML. 3. Modier la fonction hello() de manire ce quelle calcule et retourne au template la date du jour dans la variable {{ date }}. 4. Crer un template base.html dnissant laspect gnral du site laide du template tag {% block %}...{% endblock %} pour que base.html puisse tre rutilis sur dautres pages du site. 5. Modier le template home.html en simpliant grandement sa structure de manire hriter du template base.html. 6. Dans le template base.html, remplacer tous les attributs CSS style= par des attributs class= et externaliser les dnitions de styles CSS dans un chier world/static/css/hello.css. 7. Charger les fonctions de gestion des ressources statiques de Django en compltant le template base.html comme suit :
{% load staticfiles %} <html> <head> <title>Hello!</title> <link rel="stylesheet" type="text/css" href="{% static css/hello.css %}" /> </head> ... </html>
Le template tag {% static %} permet de rfrencer facilement des ressources statiques (CSS, images, javascript etc.) utilises par lapplication.
CHAPITRE 2
TP 2
16/04/2013 Lobjectif de ce TP est de dvelopper en une seule sance une application web fonctionnelle utilisant le framework Django selon le scnario suivant : Un ancien client vous contacte pour vous proposer le dveloppement du back ofce dun site dannonces immobilires. Il dispose dj dune quipe de cra performante compose dun designer, de deux graphistes et dun intgrateur. Les dlais sont courts : il souhaite avoir un site prsenter dans deux jours, cra incluse, et vous demande la livraison dun site fonctionnel en une demi-journe (la dure de ce TP !), prt tre utilis par ses quipes. Vous acceptez sa proposition et parvenez ngocier un contrat de 600 euros pour la demi-journe. Documents : Cours : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/cours/django.html nonc du TP : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/tps/html/index.html Documentation ofcielle : https ://docs.djangoproject.com Contact cours/TPs : Mathias Monnerville, mathias.monnerville@univ-montp2.fr
4. Installer lapplication libre Django Debug Toolbar en rcuprant la dernire version sur github depuis https ://github.com/django-debug-toolbar/django-debug-toolbar, soit en clonant le code avec git, soit en rcuprant un chier zip de la dernire version de la branche master. Suivre la procdure dinstallation suivante : (a) Copier le rpertoire django_toolbar dans le rpertoire du projet fastimmo (b) Modier settings.py en ajoutant au tuple MIDDLEWARE_CLASSES la chane debug_toolbar.middleware.DebugToolbarMiddleware (c) Dnir la variable suivante dans settings.py :
INTERNAL_IPS = (127.0.0.1,)
(d) Activer lapplication debug_toolbar (e) Relancer le serveur web de dveloppement : une barre de contrle Javascript doit apparaitre sur la partie droite de la fentre Vous pouvez par exemple utiliser cet outil pour inspecter le contenu des variables passes aux templates HTML, analyser lefcacit des requtes SQL effectues ou remonter la hirarchie des templates utiliss pour gnrer la page courante.
3. On souhaite enregistrer les annonces immobilires dans deux tables Annonce et TypeBien ayant les champs suivants :
Annonce Titre Description Type du bien Date et heure cration Surface m2 Nombre de pices Ville Prix 1,1
est de type
(a) Implmenter les modles Annonce et TypeBien dans vitrine/models.py avec les signatures suivantes :
from django.db import models class Annonce(models.Model): ... class TypeBien(models.Model): ...
Dnir les attributs suivants de type django.db.models.*Field pour la classe Annonce en utilisant la documentation de rfrence https ://docs.djangoproject.com/en/1.5/ref/models/elds/ :
Nom Type titre String description String type_bien clef trangre ForeignKey vers table TypeBien::Type creation Date et heure surface Entier pieces Entier ville String prix Decimal Procder de faon identique pour la classe TypeBien : Nom Type type_bien String (b) Resynchroniser la base puis xcuter la commande :
$ python manage.py sql vitrine
4. Se connecter linterface dadministration depuis http://localhost:8000/admin/ et saisir les identiants utiliss lors du premier syncdb
Linterface dadministration permet dajouter de nouveaux utilisateurs et/ou des groupes avec des droits diffrents. Cependant, vous ne pouvez pas encore ajouter dannonces. Pour cela, indiquer explicitement Django que vous souhaitez pouvoir modier les modles Annonce et TypeBien depuis linterface dadmin :
# Dans vitrine/admin.py from django.contrib import admin from vitrine.models import Annonce, TypeBien admin.site.register(Annonce) admin.site.register(TypeBien)
Rfrences : https ://docs.djangoproject.com/en/1.5/ref/contrib/csrf/ https ://docs.djangoproject.com/en/dev/ref/request-response/ 2. Indiquer le nombre de rsulats retourns dans la page
CHAPITRE 3
TP 3
30/04/2013 Documents : Cours : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/cours/django.html nonc du TP : http ://sif.info-ufr.univ-montp2.fr/mmonnerville/django/tps/html/index.html Documentation ofcielle du framework : https ://docs.djangoproject.com Contact cours/TPs : Mathias Monnerville, mathias.monnerville@univ-montp2.fr
Utiliser la fonction random.randint(min, max) pour gnrer alatoirement les informations sachant que : (a) lidentiant numrique est suprieur 10000 (b) le nom fait entre 4 et 9 caractres choisis dans lintervalle [a-z] xi
ord( a ) char ord( z ) (c) la date de naissance datetime.date est comprise entre 1988 et 1994 (d) le grade est une valeur parmi les chanes de caractres L1, L2, L3, M1, M2 (e) la mention de la bourse est un boolen 4. Enrichir le menu de la page daccueil avec une option permettant dafcher la liste de tous les tudiants boursiers de moins de 21 ans. 5. Crer un rapport accessible depuis la page daccueil rpertoriant le nombre dtudiants par grade 6. Modier lafchage de la liste de tous les tudiants pour quun clic sur le nom permette denvoyer un mail ltudiant (prxe mailto:). Ladresse email sera de la forme nom@etud.univ-montp2.fr. Pour cela, crer un template tag personnalis de la forme :
<td><a href="{% email etudiant.identifiant %}" /></td>
(c) tlcharger la dernire version de la bibliothque jQuery depuis http ://jquery.com puis linstaller dans zenith/static/js/ (d) insrer du code Javascript dans la page de rsultats en utilisant la fonction jQuery ajax() pour charger 10 rsultats supplmentaires (retourner un objet JSON depuis le code Python de la vue) :
return HttpResponse(json.dumps(data), content_type="application/json")
(e) modier le DOM la vole pour ajouter les nouveaux rsultats avec un effet de fondu fadeIn() (f) faire disparatre le lien Plus... si tous les rsultats sont afchs lcran