Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen Reboux
25 de Jan de 2013•0 gostou•1,337 visualizações
Baixar para ler offline
Denunciar
Tecnologia
Django est un framework web fullstack similaire à RoR ou Symfony mais en Python.
Inspiré comme il se doit par le Zen of Python, il permet de concevoir des applications web de qualité rapidement mais aussi (et surtout) avec du fun.
4. Un
peu
de
philo
• En
Python
• Full
stack
==
baBeries
included
(ORM,
rou9ng,
auth,
i18n,
templates,
etc.)
5. Un
peu
de
philo
• En
Python
• Full
stack
==
baBeries
included
(ORM,
rou9ng,
auth,
i18n,
templates,
etc.)
• Issu
du
monde
du
journalisme,
d'où
le
slogan
:
Le
framework
pour
les
perfec0onnistes
avec
des
deadlines.
9. Les
grandes
fonc9onnalités
ORM
#
project/books/models.py
from
django.contrib.auth.models
import
User
from
django.db
import
models
class
Book(models.Model):
author
=
models.ForeignKey(User)
9tle
=
models.CharField(max_length=200)
excerpt
=
models.CharField(required=False,
max_length=500)
published_at
=
models.DateField(required=False)
available
=
models.BooleanField(default=True)
10. Les
grandes
fonc9onnalités
ORM
• Tout
récupérer
:
Book.objects.all()
• Compter
:
User.objects.count()
• Récupérer
un
objet
:
User.objects.get(pk=1)
User.objects.get(email=user@domain.com)
User.objects.get(first_name=Chuck,
last_name=Norris)
11. Les
grandes
fonc9onnalités
ORM
• Filtrer
les
données
:
User.objects.filter(staff=True)
User.objects.filter(staff=True,
email__icontains="domain.com")
User.objects.exclude(name__in=["foo",
"bar"])
User.objects.filter(staff=True,
email__icontains="domain.com")
.exclude(name__in=["foo",
"bar"])
User.objects.filter(profile__prefs__lang__in=["fr",
"en"])
12. Les
grandes
fonc9onnalités
ORM
• Tri
:
User.objects.filter(staff=True).order_by("-‐date_joined")
• Suivi
des
rela9ons
:
User.objects.select_related().filter(staff=True)
User.objects.select_related(depth=1).filter(staff=True)
User.objects.select_related("profile",
"profile__prefs")
.filter(staff=True)
13. Les
grandes
fonc9onnalités
ORM
• On
manipule
vraiment
des
objets
Python
:
-‐
Récupérer
les
3
premiers
:
User.objects.all()[:3]
14. Les
grandes
fonc9onnalités
Les
formulaires
• Interagit
avec
les
modèles
:
#
project/books/forms.py
from
django
import
forms
from
models
import
Book
class
BookForm
(forms.ModelForm):
class
Meta:
model
=
Book
15. Les
grandes
fonc9onnalités
Les
formulaires
#
project/books/views.py
from
django.shortcuts
import
render_to_response
from
forms
import
BookForm
def
add_book(request):
if
request.method
==
"POST":
form
=
BookForm(request.POST)
if
form.is_valid():
form.save()
else:
form
=
BookForm()
return
render_to_response("books/add.html",
{"form":
form})
16. Les
grandes
fonc9onnalités
Les
templates
• Pour
les
designers
:
–
Simple
(rend
impossible
de
faire
du
modèle
dans
un
template
≠
PHP)
– Secure
par
défaut
(échappement
pour
les
XSS,
gère
silencieusement
les
valeurs
absentes)
– Extensible
17. Les
grandes
fonc9onnalités
Les
templates
<h1>{{
book
}}</h1>
<h2>Author
{{
book.author
}}</h2>
{%
if
book.chapters.count
%}
<ul>{%
for
chapter
in
book.chapters.all
%}
<li>
<a
href="{%
url
chapter_view
book.slug
%}”>{{
chapter
}}</a>
</li>
{%
endfor
%}
</ul>
{%
else
%}
<p>{%
trans
“This
book
hasn’t
chapters
yet
%}</p>
{%
endif
%}
18. Les
atouts
L’admin
• Ze
killer
feature
•
>>
admin
symfony
pourtant
déjà
top
19. Les
atouts
Reusable
apps
• Un
énorme
écosystème
d'apps
réu9lisables
(comme
drupal
ou
Wordpress,
la
qualité
en
plus
:p)
• djangopackages.com,
Pypi,
github,
etc.
20. Les
atouts
It's
just
Python
• Python
a
une
Standard
lib
très
vaste,
bien
structurée
et
de
très
bonne
qualité.
• PyPi
complète
encore
au
besoin.
21. Les
atouts
It's
just
Python
• N'importe
quel
module/package
Python
peut
être
u9lisé
:
>>>
from
__future__
import
braces
File
"<stdin>",
line
1
SyntaxError:
not
a
chance
>>>
ou
presque
!
22. Les
atouts
Concevez
des
infras
• Ne
faites
plus
des
pages
• Ne
faites
plus
des
apps
• Faites
des
infras
• PaBern
"Loose
coupling,
0ght
cohesion."
"Languages,
libraries
and
frameworks
don't
scale,
architectures
do."
—
Cal
Henderson
23. Les
points
faibles
Moins
connu
que
Symfony
ou
même
RoR
• Pas
énormément
de
ressources
en
France
(mais
un
pe9t
groupe
bien
sympathique)
24. Les
points
faibles
NodeJS
• Async
en
possible
en
Python
(gevent,
Tornado,
Twisted)
• Mais
du
coup,
pas
django
• Redis
is
your
friend
25. Développement
• Un
serveur
web
intégré
+
SQLite
./manage.py
syncdb
./manage.py
runserver
• Pour
les
migra9ons
:
South
• Pour
contrôler
ce
qui
se
passe
pendant
une
requête:
django-‐debug-‐toolbar
26. Déploiement
• Un
peu
plus
compliqué
que
PHP
• Des
hébergeurs
spécialisés
:
– Alwaysdata
(FR)
– Heroku
(US)
• Setup
typique
:
– nginx
(sta9cs
JS/CSS)
– gunicorn
(serveur
applica9f)
– Postgres
27. Qui
l'u9lise
• Issu
du
monde
du
journalisme
:
Lawrence
World,
NYT
• Google
(GAE
a
d'abord
été
dispo
en
Python
avec
un
django
modifié
pour
u9liser
BigTable)
• Mozilla
(le
site
addons)
• Nasa
• Startups:
Instagram,
Pinterest,
Disqus,
Bitbucket,
eventbrite
28. En
France
• Libé,
20
minutes
• Autolib
• Century
21
• Alwaysdata
(hébergement)
• Startups
:
Greenbureau,
Novapost
• CRM
:
Creme
CRM
29. Trouver
de
l'info
et
du
support
• En
Français
:
– Channel
IRC
#django-‐fr
irc.freenode.net
– django-‐fr
(ML
et
forum)
www.django-‐fr.org
– Tutos
hBp://tutos-‐django.com
– les
djangocongs
hBp://rencontres.django-‐fr.org