J'adore Django !
Bruno Bord
1er Juillet 2008 - RMLL
Haut les mains !
- Tout le monde lève la main
- Tu la baisses si tu as déjà réalisé au moins un projet en Django
- Tu la baisses si tu "connais" déjà Django
- Tu la baisses si tu programmes en Python
C'est qui Django ?
Un guitariste Français.
C'est qui Django ?
Plus sérieusement
A framework for perfectionists with deadlines
C'est qui Django ?
Ou en Français :
Un cadre applicatif pour les perfectionnistes pressés.
C'est qui Django ?
Non, franchement
So whenever I'm explaining Django to someone, I always end up saying, "It's just a bunch of abstractions of common Web development tasks" – from low-level HTTP wrapping to higher – and higher-level concepts. The higher you get, the more productive you can be.
-- Adrian Holovaty
C'est qui Django ?
En Français
Dès lors que je dois expliquer Django à quelqu'un, j'en arrive toujours à, "C'est un tas (de couches) d'abstractions pour les tâches usuelles du développement web du HTTP bas niveau et en remontant vers des concepts de haut niveau. Plus tu montes, plus tu deviens productif.
-- Adrian Holovaty
Pourquoi un Framework
Trois approches au développement
- "From scratch" - la page blanche / Tout à faire
- Le CMS - gestionnaire de contenu / Tout à défaire
- Le Framework - la boîte à outils / Tout est possible
Historique rapide
Usual suspects
Adrian Holovaty
Historique rapide
Usual suspects
Harry Potter
Historique rapide
Usual suspects
Harry Potter Simon Willison
Historique rapide
Fin 2002, Lawrence, Kansas
- PHP == ennui
- Créer une boîte à outils ?
- Python == love
Historique rapide
Merci patron !
- Rob Curley: "Je me fiche de savoir ce qu'il y a dans la recette"
- Juillet 2005: Publication des sources
- Licence MIT
Maintenant
Usual suspects
de dr. à g.: Simon Willison, Adrian Holovaty, Jacob Kaplan-Moss, et Matt Croydon.
Principes de base
Je vais aller vite...
... mais c'est exprès
Principes de base
MVC => MVT
- Models
- Views
ControllersTemplates
Principes de base
Models
- Models
- Views
ControllersTemplates
Models
Ce sont des classes Python
- Python sait lire du python (auto-inspection)
- Pas de SQL
- Méthodes usuelles par convention (__str__, __unicode__, get_absolute_url, ...)
Models
Par exemple
class Article(models.Model):
title = models.CharField(maxlength=50)
body = models.TextField()
published = models.BooleanField(default=True)
Models
Relations
class Category(models.Model):
label = models.CharField(maxlength=50)
class Article(models.Model):
title = models.CharField(maxlength=50)
body = models.TextField()
category = models.ForeignKey(Category)
published = models.BooleanField(default=True)
Toujours pas de SQL...
Models
Bases de données
- Chaque modèle => table. (automagiquement)
- plusieurs moteurs disponibles: MySQL, SQLite, Postgresql, ...
- Une seule couche d'abstraction (ORM)
Models
ORM, rapidement
>>> # SELECT * from articles;
>>> Article.objects.all()
[<Article>, <Article>, <Article>, <Article>, ...]
>>>
>>> # SELECT * from articles WHERE id = 123;
>>> Article.objects.get(pk=123)
<Article>
Principes de base
Views
- Models
- Views
ControllersTemplates
Views
Ce sont des fonctions
def index(request):
return "hello world"
(mouais... presque)
Views
Mais finalement, on les utilise assez peu...
Les vues génériques sont tellement plus pratiques (less is more)
URLs
urlpatterns = patterns('',
(r'^monappli/', include('monsiteweb.monappli.urls')),
)
URLs
Listes et fiches
Fichier: /monsiteweb/monappli/urls.py
:
urlpatterns = patterns('monappli.views',
(r'^/?$', 'article_list', des_donnees),
(r'^(?P<identifiant>\d+)/?$', 'article_detail',
des_donnees),
)
URLs
En résumé
URL | Fonction |
www.test.com/monappli/ |
article_list(des_donnees) |
www.test.com/monappli/189 |
article_detail(189, des_donnees) |
Bon, le code, c'est marrant...
... mais ça lasse
D'où le titre...
J'ADORE DJANGO !!!
J'adore Django #0
- Parce que c'est une boîte à outils (ça vaut pour tous les autres Frameworks)
Don't Repeat Yourself
- Assis sur les épaules des géants
Convention over configuration
- je n'ai pas à réfléchir- SOYEZ FEIGNANTS !
J'adore Django #1
- 100% Python
- Donc portable
- Donc extensible (héritage)
- Donc auto-documenté
- Plus de ";" (impact sur les troubles musculo-squelettiques)
- Donc rock & roll!
J'adore Django #2
ORM: Object Relation Manager
- SQL ? C'est quoi ça ?
- Portabilité
- Permet tout de même l'exécution de requêtes personnalisées
- Syntaxe enchaînée
J'adore Django #2
ORM: Object Relation Manager
>>> from blog.models import Article
>>> import datetime
>>> q = Article.objects.filter(
published=True).exclude(
pub_date__gte=datetime.date(2007,1,1)).filter(
title__startswith='Je')
>>> # la variable "q" est un queryset...
>>> q.count() # Attention! la requête est exécutée *là*
43L
J'adore Django #3
Communauté
J'adore Django #3
Communauté FR
J'adore Django #4
L'administration auto-générée qui poutre sa mère !
J'adore Django #4
L'administration auto-générée qui poutre sa mère !
J'adore Django #4
L'administration auto-générée qui poutre sa mère !
- "Ton CMS en dix minutes"
- Plus besoin de réinventer la roue
- Extensible et personnalisable
J'adore Django #5
Templates
- Gabarits extensibles
- Propagation de la validité W3C
- Traite le cas général rapidement
J'adore Django #6
Tests
- "Une application non-testée est une application morte."
- Tests unitaires intégrés au Framework
$ python manage.py test
J'adore Django #6
Tests
- création base de données de test
- installation de jeux d'essai (fixtures)
- lancement des tests
- accepte les unittests ou les doctests
J'adore Django #7
Dépendances minimum
- Python 2.3
- Un moteur de BDD (mysql, postgresql, sqlite...)
- euh... c'est tout !
J'adore Django #8
Batteries included
- Générateur de flux RSS
- Générateur de sitemaps
- Protection contre les XSS
- Moteurs de markups intégrés
- Serveur de développement en local
- Internationalisation via gettext
- Système de cache
J'adore Django #9
- Mise à jour en même temps que le code
- Grande qualité
Django book
- livre électronique + papier
- co-rédigé par les internautes
- publié sous contrat Creative Commons