Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Bien, ce chapitre un peu spécial est en fait un TP, qui va vous permettre de poser vos connaissances et faire le point sur ce que vous avez appris : c'est en pratiquant que l'on apprend le mieux, en étant confronté à des problèmes. Vous retrouverez plusieurs T.P. tout au long du tutoriel, ce n'est donc pas le dernier !
Le T.P. va se diviser en plusieurs phases parmi lesquelles je vous donnerai tout d'abord ce que l'on attend de vous et du projet que vous allez créer. Ensuite, place à une correction
type plus ou moins détaillée, puis, pour terminer, des idées d'amélioration, pour vous entraîner encore et encore ! Il faut être au point.
Dans ce premier T.P. vous devrez réaliser une interface de gestion des emprunts pour une bibliothèque. Juste une partie d'administration qui servira à Mme la bibliothécaire dans son lieu de travail et chez elle, pour faire l'inventaire et tout ça. Django lui semble approprié car ça lui permet d'avoir une application accessible de partout.
Le principal but de ce T.P. est comme déjà dit de poser les connaissances et faire le bilan sur ce qui a été acquis dans les précédents chapitres.
Commande de la bibliothécaire : ce qu'elle attend de son gestionnaire
Vous devrez dans un premier temps créer un projet, avec dedans deux applications. Une application traitera des emprunts des différents livres disponibles et l'autre des adhérents à la bibliothèque. Ces deux applications seront liées, quelque chose de nouveau, que j'aurai l'occasion de vous faire découvrir un peu plus bas. Place à présent au descriptif des deux applications que vous devrez créer.
Première application : la gestion des adhérents
Comme explicité dans le titre, vous devrez pour commencer créer une application permettant de gérer les adhérents de la bibliothèque. La bibliothécaire a besoin de plusieurs renseignements quant à ses affamés de livres, en voici la liste non exhaustive, Mme la bibliothécaire étant ouverte à toute suggestion :
- Le nom de famille de l'adhérent ;
- Le prénom de l'adhérent ;
- Le sexe de l'adhérent, par un menu déroulant, je fais bien entendu référence à l'option choices ;
- Le numéro d'adhérent commençant obligatoirement par 845 et étant composé de 5 chiffres derrière. Un numéro unique bien entendu !
- La date de naissance de l'adhérent, pour le faire bénéficier d'offres exceptionnelles et permettre à la bibliothécaire de faire des études statistiques sur ses adhérents ;
- La date d'arrivée à la bibliothèque pour permettre de faire le point sur les adhérents ;
- Ville où réside l'adhérent ;
- Code postal de la ville où réside l'adhérent, un nombre entier à 5 chiffres ;
- Adresse postale de l'adhérent, un champ pour pouvoir indiquer l'adresse postale de l'adhérent facilement et ainsi retrouver ses traces s'il oublie de rendre ses livres !
- Adresse email de l'adhérent pour pouvoir le tenir au courant des nouvelles arrivées, et autres du même genre ;
- Numéro de téléphone de l'adhérent.
Seconde application : la gestion des emprunts
Maintenant que les adhérents peuvent être gérés facilement, place à la gestion des emprunts des livres. Dans cette seconde application, un formulaire pour remplir les sorties de livre. Voyons comment et de quoi ce formulaire devra être composé :
- Un champ avec le numéro du livre sorti, un numéro unique, normal, un livre ne peut sortir deux fois... Ce numéro se compose de 6 chiffres ;
- La date de sortie du livre est la date à laquelle est sorti le livre de la bibliothèque ;
- Date avant laquelle le livre doit être ramené ;
- Avec une liaison vers l'autre application, les différents noms des adhérents dans un menu déroulant, pour sélectionner la personne qui a sorti le livre. Vous me direz, on aurait pu tout mettre dans une seule et unique application, je suis d'accord, mais je voulais aborder la liaison entre plusieurs applications.

Lier deux applications, rien de plus simple !
Bien, je vais aborder ici ce qu'il vous manque pour pouvoir réaliser le T.P., notamment la liaison d'applications. Pour lier deux applications, il suffit d'importer dans le modèle dans lequel nous avons besoin d'informations d'une autre application l'autre application. Rappelez vous le fichier
__init__.py qui définit le dossier comme un module. C'est grâce à lui que nous allons pouvoir faire notre importation. Dans votre modèle il suffit d'importer l'autre application de la façon suivante :
Code : Python1 | from MonProjet.MonApplication.models import MonModule
|
Un simple champ de type
ForeignKey suffit ensuite.
Je ne vais pas revenir sur la création d'un projet et d'applications, il ne devrait pas y avoir de difficulté à ce niveau-là je pense. Passons donc directement au code des fichiers
models.py de nos deux applications.
La gestion des adhérents
Code : Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 | # -*- coding: utf-8 -*-
from django.db import models
sexe_choix = (
('M', 'Masculin'),
('F', 'Féminin'),
)
class Adherent(models.Model):
# Informations personnelles sur l'adhérent :
nom = models.CharField('Nom de Famille', max_length=100, help_text='Indiquez ici le nom de famille de l\'adhérent.')
prenom = models.CharField('Prénom', max_length=100, help_text='Indiquez ici le prénom de l\'adhérent.')
sexe = models.CharField('Sexe', max_length=100, choices=sexe_choix, help_text='Indiquez ici le sexe de l\'adhérent.')
date_naissance = models.DateField('Date de naissance', help_text='Indiquez ici la date à laquelle est né l\'adhérent.')
# Informations quant à son compte d'adhérent à la bibliothèque :
numero_adherent = models.PositiveIntegerField('Numéro d\'adhérent', max_length=8, default='845', help_text='Numéro de compte de l\'adhérent.', editable=False, unique=True)
date_arrivee = models.DateField('Date d\'adhérence', help_text='Date d\'arrivée de l\'adhérent au sein de la bibliothèque.')
# Possibilités de contact :
numero_telephone = models.IntegerField('Numéro de téléphone', default='03', max_length=10, blank=True, help_text='Indiquez ici le numéro de téléhphone de l\'adhérent.')
email = models.EmailField('Adresse email', blank=True, help_text='Indiquez ici l\'adresse email de l\'adhérent.')
# Informations postales :
ville = models.CharField(max_length=100, help_text='Nom du lieu de résidence de l\'adhérent.')
code_postal = models.IntegerField('Code postal', max_length=5, help_text='Code postal du lieu de résidence de l\'adhérent.')
adresse = models.CharField('Adresse postale', max_length=200, help_text='Adresse postale de l\'adhérent')
def __unicode__(self):
self.nom_complet = '%s %s' % (self.nom, self.prenom)
return self.nom_complet
class Admin:
pass
|
Rien à préciser sur ce code, il est compréhensible de tous si vous avez suivi les précédents chapitres. Je tenais simplement à m'attarder sur les lignes surlignées. Nous avons déjà rencontré la méthode
__unicode__ et nous en avions sorti qu'elle permettait de définir ce qui serait affiché quand on ferait une liaison sur notre module. Là, nous ne voulons pas que le nom ou le prénom d'affiché dans le menu déroulant sur la page d'ajout d'emprunt, mais les deux. Nous avons donc construit une variable
nom_complet. Tout ça pour vous montrer qu'on peut retourner n'importe quoi.
La gestion des emprunts
Code : Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | # -*- coding: utf-8 -*-
from django.db import models
from bibliotheque.adherents.models import Adherent
class Emprunt(models.Model):
# En ce qui concerne le livre emprunté :
numero_livre = models.IntegerField('Numéro du livre', unique=True, max_length=6, help_text='Numéro du livre emprunté.')
# Les informations calendaires :
date_sortie = models.DateField('Date de sortie', help_text='Indiquez ici la date de sortie de la bibliothèque du livre.')
date_rentree = models.DateField('Date de rentrée', help_text='Date maximum à laquelle livre doit être ramené à la bibliothèque.')
# Adhérent empruntant le livre :
adherent = models.ForeignKey(Adherent, help_text='Adhérent ayant emprunté le livre à la bibliothèque.')
class Admin:
pass
|
Rien non plus à préciser sur ce code, juste la mise en valeur d'une ligne, celle liée à l'autre application. Comme vous pouvez voir, module extérieur à l'application ou pas, ça reste la même chose.
J'espère que ce premier T.P. vous aura permis de faire le bilan de ce qui a été acquis. Ce T.P. est un exemple de ce à quoi vous pouvez d'ores et déjà arriver, n'hésitez pas à créer vos propres projets, et pas spécialement attendre les T.P. Ça vous permettra entre autres de réfléchir à la structure de vos modèles.
Sinon, comme vous avez pu le remarquer, l'administration obtenue n'est pas très pratique, ça fait un peu fouillis et nous allons remédier à cela dans le prochain chapitre.