SlideShare ist ein Scribd-Unternehmen logo
1 von 31
Downloaden Sie, um offline zu lesen
Prêt	
  pour	
  un	
  ciné	
  ?	
  
Django	
  

       Du	
  framework	
  	
  
pour	
  les	
  perfec9onnistes	
  	
  
   au	
  pony	
  powered	
  
Un	
  peu	
  de	
  philo	
  
•  En	
  Python	
  
Un	
  peu	
  de	
  philo	
  
•  En	
  Python	
  
•  Full	
   stack	
   ==	
   baBeries	
   included	
   (ORM,	
   rou9ng,	
  
   auth,	
  i18n,	
  templates,	
  etc.)	
  
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.	
  
Les	
  grandes	
  fonc9onnalités	
  
                    Contrat	
  de	
  base	
  




“Get	
  an	
  H:pRequest,	
  return	
  an	
  H:pResponse”	
  
Les	
  grandes	
  fonc9onnalités	
  
                         ORM	
  

•  Ac9ve	
  Record	
  
Les	
  grandes	
  fonc9onnalités	
  
                             ORM	
  

•  Ac9ve	
  Record	
  
•  Syntaxe	
  déclara9ve	
  en	
  Python	
  
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) 	
  	
  
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)	
  
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"])	
  
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)	
  
Les	
  grandes	
  fonc9onnalités	
  
                                                    ORM	
  

•  On	
  manipule	
  vraiment	
  des	
  objets	
  Python	
  :	
  
   -­‐	
  Récupérer	
  les	
  3	
  premiers	
  :	
  
   	
  	
  	
  	
  	
  	
  	
  	
  User.objects.all()[:3]	
  
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	
  
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})	
  
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	
  
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	
  %}	
  
Les	
  atouts	
  
                              L’admin	
  
•  Ze	
  killer	
  feature	
  
•  	
  >>	
  admin	
  symfony	
  pourtant	
  déjà	
  top	
  
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.	
  
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.	
  
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	
  !	
  
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	
  
Les	
  points	
  faibles	
  
     Moins	
  connu	
  que	
  Symfony	
  ou	
  même	
  RoR	
  

•  Pas	
  énormément	
  de	
  ressources	
  en	
  France	
  
   (mais	
  un	
  pe9t	
  groupe	
  bien	
  sympathique)	
  
Les	
  points	
  faibles	
  
                              NodeJS	
  

•  Async	
  en	
  possible	
  en	
  Python	
  (gevent,	
  
   Tornado,	
  Twisted)	
  
•  Mais	
  du	
  coup,	
  pas	
  django	
  
•  Redis	
  is	
  your	
  friend	
  
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	
  
	
  
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	
  
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	
  
En	
  France	
  

•    Libé,	
  20	
  minutes	
  
•    Autolib	
  
•    Century	
  21	
  
•    Alwaysdata	
  (hébergement)	
  
•    Startups	
  :	
  Greenbureau,	
  Novapost	
  
•    CRM	
  :	
  Creme	
  CRM	
  
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	
  	
  
Remerciements	
  
@revolunet	
  pour	
  django	
  success	
  stories	
  	
  
   hBp://www.revolunet.com/sta9c/django-­‐success-­‐
   stories	
  	
  
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	
  
   	
  

Weitere ähnliche Inhalte

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

Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
gilleslenfant
 
Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend Search
Robert Viseur
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blog
PHPPRO
 

Ähnlich wie Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen Reboux (20)

GetText / Rails - FR
GetText / Rails - FRGetText / Rails - FR
GetText / Rails - FR
 
GetText / Rails
GetText / RailsGetText / Rails
GetText / Rails
 
Présentation de Robot framework
Présentation de Robot frameworkPrésentation de Robot framework
Présentation de Robot framework
 
C2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partieC2 - Langage C - ISIMA 1 - Deuxieme partie
C2 - Langage C - ISIMA 1 - Deuxieme partie
 
alphorm.com - Formation Programmer en C++
alphorm.com - Formation Programmer en C++alphorm.com - Formation Programmer en C++
alphorm.com - Formation Programmer en C++
 
2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté2015: L'année d'Elixir, Code, écosystème et communauté
2015: L'année d'Elixir, Code, écosystème et communauté
 
Go
GoGo
Go
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Industrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHPIndustrialiser le contrat dans un projet PHP
Industrialiser le contrat dans un projet PHP
 
Django by mrjmad
Django by mrjmadDjango by mrjmad
Django by mrjmad
 
cours1.ppt
cours1.pptcours1.ppt
cours1.ppt
 
Paris RailsCamp 2009
Paris RailsCamp 2009Paris RailsCamp 2009
Paris RailsCamp 2009
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Presentation du Livre Django Avancé
Presentation du Livre Django AvancéPresentation du Livre Django Avancé
Presentation du Livre Django Avancé
 
Développement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend SearchDéveloppement d'un moteur de recherche avec Zend Search
Développement d'un moteur de recherche avec Zend Search
 
Créer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libresCréer un moteur de recherche avec des logiciels libres
Créer un moteur de recherche avec des logiciels libres
 
20100221 my phingtool - blog
20100221   my phingtool - blog20100221   my phingtool - blog
20100221 my phingtool - blog
 
Réussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDBRéussir une montée en charge avec MongoDB
Réussir une montée en charge avec MongoDB
 
Conference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à ParisConference drupal 8 au Forum PHP 2013 à Paris
Conference drupal 8 au Forum PHP 2013 à Paris
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 

Mehr von Normandie Web Xperts

#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web
Normandie Web Xperts
 
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSIIConférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Normandie Web Xperts
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Normandie Web Xperts
 
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Normandie Web Xperts
 
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Normandie Web Xperts
 

Mehr von Normandie Web Xperts (20)

#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
#nwxtech9 Rudy Baer et Kevin Vézier - Ansible, l’outil du sysadmin paresseux ...
 
#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 Offline#nwxtech7 Grégory Le Garec - HTML5 Offline
#nwxtech7 Grégory Le Garec - HTML5 Offline
 
#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHP#nwxtech6 Olivier Martineau - Les démons en PHP
#nwxtech6 Olivier Martineau - Les démons en PHP
 
#nwxtech6 Mickaël Deffontaine - Drupal API Form
#nwxtech6 Mickaël Deffontaine - Drupal API Form#nwxtech6 Mickaël Deffontaine - Drupal API Form
#nwxtech6 Mickaël Deffontaine - Drupal API Form
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web
 
#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web#nwxtech6 Frédéric Bisson - SVG pour le web
#nwxtech6 Frédéric Bisson - SVG pour le web
 
FlexRox
FlexRoxFlexRox
FlexRox
 
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwdJulien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
Julien Nicolas - Comment coucher avec son intégrateur en 5 étapes - #nwxwd
 
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
Julien Verhaeghe - API REST : Le module Services de Drupal - Drupal Meetup Ro...
 
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
Frédéric Bisson - 8 ans de Drupal - Drupal Meetup Rouen #3
 
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSIIConférence #nwx2014 - Nicolas Saillard - Agilité en SSII
Conférence #nwx2014 - Nicolas Saillard - Agilité en SSII
 
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
Conférence #nwx2014 - Maxime Mauchaussée - Partager du code maintenable et év...
 
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tousConférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
Conférence #nwx2014 - Ivan Dalmet - Ergonomie web, les bases pour tous
 
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
Conférence #nwxtech5 : Présentation du hacker space Jeanne d'Hack par Samir C...
 
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercierConférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
Conférence #nwxtech5 : HTML5 Mobile avec Sencha Touch par Arnaud lemercier
 
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric BissonConférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
Conférence #nwxtech5 : Drupal et OpenLayers par Frédéric Bisson
 
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain LouvetConférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
Conférence #nwxtech5 : Selenium WebDriver 2 par Romain Louvet
 
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
Conférence #nwxtech4 : Responsive Web Design et Préprocesseurs CSS par Benjam...
 
Conférence #nwxtech4 : GIT par Thibaud Juin
Conférence #nwxtech4 : GIT par Thibaud JuinConférence #nwxtech4 : GIT par Thibaud Juin
Conférence #nwxtech4 : GIT par Thibaud Juin
 
Méthode : Réalisation d'un projet mobile (Sushee)
Méthode : Réalisation d'un projet mobile (Sushee)Méthode : Réalisation d'un projet mobile (Sushee)
Méthode : Réalisation d'un projet mobile (Sushee)
 

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

  • 1. Prêt  pour  un  ciné  ?  
  • 2. Django   Du  framework     pour  les  perfec9onnistes     au  pony  powered  
  • 3. Un  peu  de  philo   •  En  Python  
  • 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.  
  • 6. Les  grandes  fonc9onnalités   Contrat  de  base   “Get  an  H:pRequest,  return  an  H:pResponse”  
  • 7. Les  grandes  fonc9onnalités   ORM   •  Ac9ve  Record  
  • 8. Les  grandes  fonc9onnalités   ORM   •  Ac9ve  Record   •  Syntaxe  déclara9ve  en  Python  
  • 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    
  • 30. Remerciements   @revolunet  pour  django  success  stories     hBp://www.revolunet.com/sta9c/django-­‐success-­‐ stories    
  • 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