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)
Nous allons partir du code ci-dessous et le détailler de façon à ce que vous compreniez facilement. Le fichier à ouvrir est
models.py, je reprendrai le fichier de
monprojet/monapplication.
Code : Python 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | from django.db import models
class Categorie(models.Model):
nom = models.CharField(max_length=100)
description = models.TextField()
def __unicode__(self):
return self.nom
class Admin:
pass
class Page(models.Model):
titre = models.CharField(max_length=100)
contenu = models.TextField()
categorie = models.ForeignKey(Categorie)
class Admin:
pass
|
Voilà le code que je viens de créer et qui est celui de notre modèle. On retrouve des choses connues et déjà vues, notamment le module importé et la déclaration des classes correspondant à nos deux modules, un module de gestion des pages et l'autre des catégories. Découvrons le reste à présent.
Explications des différents champs
Code : Python1
2 | nom = models.CharField(max_length=100)
description = models.TextField()
|
Code : Python1
2
3 | titre = models.CharField(max_length=100)
contenu = models.TextField()
categorie = models.ForeignKey(Categorie)
|
On appelle champ ce que sont les variables
nom, description, titre, contenu et catégorie. Cela va correspondre à un champ dans votre SGBD. Par exemple, le champ
nom sera un champ de type
varchar, une simple ligne de texte. Le champ description lui sera de type
text, un grand champ texte où l'on peut rédiger sur plusieurs lignes. On trouve comme ça une vingtaine de types de champ différents. Nous les découvrirons tous en détail dans le prochain chapitre. Voilà un schéma pour reprendre ce que je viens de dire :
Comme vous l'avez sans doute remarqué, il y a un attribut max_length=100
dans les champs de type CharField. C'est parce que ce type de champ requiert un attribut obligatoire qu'est celui-là. max_length=100
permet de définir le nombre maximum de caractères possibles.
Le champ de type ForeignKey, explications
Un type de champ que je n'ai pas encore évoqué c'est
ForeignKey qui permet de lier deux modules Django. Ici, le module
Categorie est lié au module
Page. Dans l'administration que Django nous génèrera, nous aurons dans notre page pour l'ajout de pages un menu déroulant avec à l'intérieur les différentes catégories possibles. Si vous voulez, ça permet de faire une jointure comme en PHP, si vous connaissez. Je parlais bien entendu de cette ligne
categorie = models.ForeignKey(Categorie)
.
C'est bien beau de lier des modules, mais Django n'est pas devin (pas encore du moins) et en conséquent, dans notre menu déroulant pour sélectionner la catégorie, qu'est-ce qui sera affiché ? Il faut le définir dans notre classe
Categorie. C'est ce que fait le bout de code suivant :
Code : Python1
2 | def __unicode__(self):
return self.nom
|
Ça va dire à Django que
nom est le champ
à prendre par défaut, même si je n'aime pas trop ce terme. C'est le nom des catégories qui sera affiché dans le menu déroulant.
Mettons en place la génération automatique de l'administration
Dans le code encore non étudié, il reste celui présenté ci-dessous. Il va permettre à Django de savoir que nous voulons qu'il génère automatiquement une administration pour les modules de notre application.
Code : Python
Je n'ai rien à ajouter là-dessus, je vous dis juste que nous reviendrons sur cette administration générée automatiquement dans quelques chapitres, nous verrons que mettre à la place du
pass
.
Nous avons un présent notre projet de commencé et une application de terminée. Il serait sympa d'installer d'ores et déjà le projet et notre application pour pouvoir tester au fur et à mesure du codage.
Nous allons dans un premier temps construire notre base de données à partir du modèle créé plus haut. Pour ça, il va falloir remplir le fichier
setings.py si ce n'est déjà fait. De même, il va falloir ajouter l'application précédemment créée à la liste des applications dans le fichier
settings.py. Je vous laisse faire, ça a déjà été vu, il ne devrait pas y avoir de problème.
Votre base de données doit être créée par vos soins, Django ne la créera pas, je vous conseille donc d'aller en créer une, soit à partir de PHPMyAdmin ou de la console MySQL interactive. Après, ça dépend du SGBD utilisé.
Lancer la création des tables et configurer un projet
Bien, tout est prêt : la base de données est créée, notre modèle ne comporte pas d'erreur, etc. On peut donc lancer la création des tables dans notre base de données. Django a une commande permettant de le faire :
Code : Console
Ce qui va se passer est simple : Django va aller exécuter le code SQL vu plus haut. Après exécution de cette commande dans la console, vous devriez avoir une réponse de Django :
Citation : Réponse de DjangoCreating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table monapplication_categorie
Creating table monapplication_page
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no):
Django vous pose des questions ! Il vous demande si oui ou non vous voulez créer un super utilisateur. Je vous conseille de le faire, il suffit de répondre
yes. Vous allez après devoir renseigner un nom d'utilisateur, son adresse email et un mot de passe. Si tout s'est bien déroulé, Django vous répondra encore :
Citation : Réponse de DjangoSuperuser created successfully.
Installing index for auth.Message model
Installing index for auth.Permission model
Installing index for monapplication.Page model
Loading 'initial_data' fixtures...
No fixtures found.
Serveur de développement Django
Django embarque avec lui un serveur de développement pour développer et pouvoir déboguer rapidement. Il vous permet à vous de tester votre projet au fur et à mesure de sa conception. Le serveur de développement se lance de la façon suivante :
Code : Console | python manage.py runserver |
Cette commande lancera le serveur de développement de Django. Il est par défaut lancé sur le port 8000 mais vous pouvez très bien spécifier le port, en le mettant de la façon suivante dans votre commande :
runserver 8888.
Vous pouvez à présent accéder à votre projet depuis l'adresse suivante :
http://127.0.0.1:8000. Adaptez bien entendu le port à celui que vous avez mis si vous en avez mis un. Vous tombez normalement sur une jolie page avec du bleu, du blanc et du gris.
Vous avez votre projet devant les yeux, le serveur de développement recense toutes les actions effectuées comme vous pouvez le voir. À son lancement et pendant son exécution, il vérifiera vos modèles voir s'il n'y a pas d'erreur et vous fera un diagnostic comme vu avec la commande
python manage.py validate monapplication.
Dire à Django que notre projet utilise la génération automatique de l'administration
Nous avions configuré les modules des applications pour savoir si oui ou non on les intégrait dans l'administration automatiquement créée, maintenant, il va falloir le dire à notre projet et définir une adresse pour notre administration. Pour dire dans un premier temps que notre projet utilise l'administration générée automatiquement, il faut ouvrir le fichier
settings.py et ajouter la ligne suivante comme ci-suit :
Code : Python1
2
3
4
5
6
7
8 | INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.admin',
'monprojet.monapplication',
)
|
Maintenant que c'est fait, on va aller définir l'adresse de notre administration, car c'est bien beau d'avoir une administration, mais encore faut-il qu'elle soit accessible ! Pour se faire, ouvrez le fichier
urls.py à la racine de votre projet. Il ressemble à ça :
Code : Python1
2
3
4
5
6
7
8
9 | from django.conf.urls.defaults import *
urlpatterns = patterns('',
# Example:
# (r'^monprojet/', include('monprojet.foo.urls')),
# Uncomment this for admin:
# (r'^admin/', include('django.contrib.admin.urls')),
)
|
Pour activer l'administration, décommentez la ligne
# (r'^admin/', include('django.contrib.admin.urls')),
. Par défaut, l'administration sera disponible à l'adresse
http://127.0.0.1:8000/admin/. Vous pouvez modifier cela en changeant le
admin en ce que vous voulez. Nous aurons l'occasion de revenir sur ce fichier plus tard dans le chapitre, ne vous inquiétez pas si vous n'avez pas tout bien compris.
Comme vous l'avez sans doute remarqué, ça ne marche toujours pas, c'est parce qu'il faut relancer la commande python manage.py syncdb qui n'exécute le code SQL pour les nouvelles applications seulement qui n'existent pas encore dans la base de données. Elle n'affectera donc en rien les données déjà présentes. Vous pouvez donc l'utiliser sans crainte autant de fois que vous voulez.
Voilà, vous pouvez accéder à l'administration générée automatiquement à partir des modèles de vos différentes applications. Cette administration est le sujet de la prochaine partie du chapitre.
Notre administration étant générée à présent, nous allons la découvrir dans cette partie. Rendez-vous donc sur votre administration, à partir de l'adresse suivante :
http://127.0.0.1:8000/admin/. Encore une fois, si vous avez adapté, modifiez en conséquent.
Boîte de connexion à l'administration
Bon, nous sommes sur notre page d'administration et se présente devant nous un espace pour se connecter. Vous vous souvenez de l'utilisateur que vous avez enregistré à la création des tables ? Ce sont ces identifiants qu'il va falloir utiliser pour se connecter. Voilà une capture d'écran de ce que vous devez avoir :
Page d'accueil de notre administration
Une fois connecté, vous arrivez sur la page d'accueil de l'administration générée par Django. Rien de bien compliqué, elle est assez simple. On notera l'ergonomie de l'espace d'administration ! Nous verrons également plus tard que l'on peut modifier et adapter selon nos besoins cette page d'accueil.
Pour finir sur l'espace d'administration
Je n'irai pas plus loin dans l'espace d'administration, vous êtes assez grand pour découvrir tout seul, de plus que cette dernière est en français. Je marquerai juste votre attention sur le fait que Django dispose d'une gestion des utilisateurs et des groupes. Django génère automatiquement les différents droits, comme vous pourrez le voir dans la gestion des groupes. Vous remarquerez également la présence d'une application
Sites, qui permet de gérer plusieurs sites, vous pouvez l'enlever en supprimant la ligne suivante du fichier
settings.py :
'django.contrib.sites'
.