Quatrième partie: une simple Application

Django segmente les projets en app, chaque app représentant une partie d'un site, comme un blog, un forum, une galerie de photos, une api REST (rêvons un peu). Dans cette première app, ce blog, je vais vous montrer comment réaliser rapidement le blog en utilisant au maximum les composants de Django.


Créons notre app dans notre répertoire de projet (n'oubliez pas d'utiliser le python que vous avez installé dans votre virtualenv): 


[benoit@hope /tmp/litchis] % source apps/bin/activate [benoit@hope /tmp/litchis] % ./manage.py startapp blog


Ajoutons cette nouvelle app dans la configuration: il faut ajouter "litchis.blog" dans le INSTALLED_APPS:


INSTALLED_APPS = ( 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.humanize', 'django.contrib.comments', 'litchis.blog', )


Maintenant, on va s'occuper des modèles, ce sont les classes qui mappent les tables de la base de donnée. Voici un simple modèle d'une Entrée dans notre base de donnée dans le fichier blog/models.py


from django.db import models class Entry(models.Model): pub_date = models.DateTimeField(help_text="Date de publication") author = models.CharField(max_length=32, help_text='Use the full name, e.g., "John Lennon".') slug = models.CharField(max_length=32) headline = models.CharField(max_length=255, help_text="titre") summary = models.TextField(help_text='Use plain text (no HTML).', help_text="Sommaire") body = models.TextField(help_text='Use raw HTML, including <p> tags.') is_published = models.BooleanField(help_text="Publier sur le site")


Maintenant, il faut dire à django de bien vouloir générer les tables associées:


[benoit@hope /tmp/litchis] % ./manage.py syncdb


Comme je l'ai dit tout à l'heure, nous allons utiliser tous les composants de django, à savoir les vues génériques. Comme le dit la doc, il est souvent pénible de toujours réécrire le code qui permet d'ajouter une entrée, la modifier, la supprimer, lister toutes les entrées dans un et les paginer. Pour éviter tout ca, django propose les "generic views". Dans cette première partie nous allons nous concentrer sur la pagination, vu que nous écrirons les articles depuis l'admin auto-générée par django.


Passons aux urls. L'url routing de django se fait par des regexp qui pointent vers des vues prenant au minimum comme argument un objet request. Dans cette partie nos vues sont donc nos vues génériques. Dans un premier temps, editez le ficher "urls.py" à la base de votre répertoire pour inclure un autre "urls.py"qui se trouve dans "blog/":


from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^litchis/', include('litchis.blog.urls')), )


maintenant le fichier urls.py de notre app:


#on importe notre modele: from models import Entry #on importe les views : from django.views.generic import date_based, list_detail #un dict pour les paramètres passés aux genericviews: info_dict = { #la query utilisant l'orm de django 'queryset': Entry.objects.order_by('pub_date'), 'date_field': 'pub_date', } urlpatterns = patterns('', url( r'^$', date_based.archive_index, dict( info_dict, template_name='blog.html'), name="blog", ), url( r'^archives/', list_detail.object_list, { 'queryset': Entry.objects.order_by('-pub_date'), 'template_name': 'archives.html' }, name="blog_archives", ),)


Le Premier argument est la regexp, le deuxième la vue, le troisième la série d'argument à passer à la vue et le dernier est

l'url nommée, pour ne pas avoir à changer toutes les templates lorsque je change une regexp.

Le queryset définis quelle requête faire à la base de donnée.

Voila, il ne nous restera plus qu'à remplir les templates, mais ce sera dans un prochain épisode !

0 commentaires

Laisser un commentaire





Supportez Django

Si vous êtes intéressé par django, le framework de développement web utilisé pour créer ce site, si vous souhaitez contribuer ou faire une simple donation Suivez ce lien - ce sera d'une grande aide et sera surement apprécié.