Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen Reboux

1,226 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,226
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen Reboux

  1. 1. Prêt  pour  un  ciné  ?  
  2. 2. Django   Du  framework    pour  les  perfec9onnistes     au  pony  powered  
  3. 3. Un  peu  de  philo  •  En  Python  
  4. 4. Un  peu  de  philo  •  En  Python  •  Full   stack   ==   baBeries   included   (ORM,   rou9ng,   auth,  i18n,  templates,  etc.)  
  5. 5. Un  peu  de  philo  •  En  Python  •  Full   stack   ==   baBeries   included   (ORM,   rou9ng,   auth,  i18n,  templates,  etc.)  •  Issu  du  monde  du  journalisme,  doù  le  slogan  :   Le   framework   pour   les   perfec0onnistes   avec   des   deadlines.  
  6. 6. Les  grandes  fonc9onnalités   Contrat  de  base  “Get  an  H:pRequest,  return  an  H:pResponse”  
  7. 7. Les  grandes  fonc9onnalités   ORM  •  Ac9ve  Record  
  8. 8. Les  grandes  fonc9onnalités   ORM  •  Ac9ve  Record  •  Syntaxe  déclara9ve  en  Python  
  9. 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. 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. 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. 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. 13. Les  grandes  fonc9onnalités   ORM  •  On  manipule  vraiment  des  objets  Python  :   -­‐  Récupérer  les  3  premiers  :                  User.objects.all()[:3]  
  14. 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. 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. 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. 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. 18. Les  atouts   L’admin  •  Ze  killer  feature  •   >>  admin  symfony  pourtant  déjà  top  
  19. 19. Les  atouts   Reusable  apps  •  Un  énorme  écosystème  dapps  réu9lisables   (comme  drupal  ou  Wordpress,  la  qualité  en   plus  :p)  •  djangopackages.com,  Pypi,  github,  etc.  
  20. 20. Les  atouts   Its  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. 21. Les  atouts   Its  just  Python  •  Nimporte  quel  module/package  Python  peut  être   u9lisé  :          >>>  from  __future__  import  braces              File  "<stdin>",  line  1          SyntaxError:  not  a  chance          >>>            ou  presque  !  
  22. 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  dont  scale,   architectures  do."                                                                                                                          —  Cal  Henderson  
  23. 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. 24. Les  points  faibles   NodeJS  •  Async  en  possible  en  Python  (gevent,   Tornado,  Twisted)  •  Mais  du  coup,  pas  django  •  Redis  is  your  friend  
  25. 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. 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. 27. Qui  lu9lise  •  Issu  du  monde  du  journalisme  :  Lawrence   World,  NYT  •  Google  (GAE  a  dabord  été  dispo  en  Python   avec  un  django  modifié  pour  u9liser  BigTable)  •  Mozilla  (le  site  addons)  •  Nasa  •  Startups:  Instagram,  Pinterest,  Disqus,   Bitbucket,  eventbrite  
  28. 28. En  France  •  Libé,  20  minutes  •  Autolib  •  Century  21  •  Alwaysdata  (hébergement)  •  Startups  :  Greenbureau,  Novapost  •  CRM  :  Creme  CRM  
  29. 29. Trouver  de  linfo  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    
  30. 30. Remerciements  @revolunet  pour  django  success  stories     hBp://www.revolunet.com/sta9c/django-­‐success-­‐ stories    
  31. 31. Pour  finir  •  @nau9lebleu  /  hBp://nau9lebleu.tumblr.com    •  @greenbureaufr  /  hBp://greenbureau.fr   –  Stages  &  jobs   hBp://remixjobs.com/emploi/Developpement/ Developpeur-­‐Integrateur-­‐Front-­‐End-­‐Django-­‐H-­‐F/ 15980    

×