SlideShare uma empresa Scribd logo
1 de 36
Baixar para ler offline
[center]




           Django Avancé
              Yohann Gabory
Présentation de l’auteur



   Yohann Gabory
                   Webdevelopper Outscale




                   Auteur chez Eyrolles




                   Djangonaute depuis la version 0.95
Présentation de l’auteur



   Collaboration


                   Préface de Nicolas Ferrari, co-fondateur d’alwaysdata
                   (https://www.alwaysdata.com/)
                   Relecture de Thomas Petillon, consultant senior IT et
                   expert python/django
                   Éditions Eyrolles
Pourquoi un livre en français ?



   Aider les nouveaux arrivants



                   Le premier contact est plus facile en français
                   Le succès d’un outil tient à sa documentation
                   La documentation française n’est plus à jour depuis
                   looooongtemps
Pourquoi un livre en français ?



   Proposer de nouvelles choses


                   Le framework a beaucoup évolué depuis les parutions
                   anglophones
                   C’est un framework de plus en plus largement utilisé
                   Il est temps d’aller plus loin
                           Les CBV
                           Les “Reusable Apps”
                           Les besoins ont changé API, Oauth etc. . .
Pourquoi un livre en français ?


   “Apprendre la programmation web
   avec Python et Django”


                   Un livre didactique pour les débutants
                   Les base de la programmation web
                   Les notions essentielles
                   Mise en application avec Django
Un avant-goût du contenu du livre



   Des tutoriels


                  Un Bug Tracker
                          Parce que les bonnes pratiques se prennent dès le départ
                  Un Agenda Partagé
                          Tremble Google Agenda, les poneys arrivent!
                  Des exemples de “la vraie vie”
                          Parce c’est au pied du mur. . .
                  Une volonté d’aller au fond des choses
Un avant-goût du contenu du livre



   Des bonnes pratiques

                  Comment structurer ses modèles
                          quels type d’héritage utiliser
                          où mettre la logique de votre application
                  Le principe du DRY : partout
                          Dans les urls, les modèles, les vues, les templates.
                          Un seul endroit oui mais clairement identifiable: surtout!
                  Découplez!
                          Identifiez les usages
                          Une application == une fonctionalité
                          Écrivez “plug’n play”
                  Les bonnes façons de résoudre les problèmes
Un avant-goût du contenu du livre



   Des exemples avancés

                  une API Oauth2 avec Tastypie et Slumber
                          un serveur d’API
                          un client.
                          une revue des verbes HTTP:
                  GET, POST, PUT, DELETE, HEAD, PATCH. . .
                  une application de prototypage sans modèle
                          un bon exemple d’application réutilisable (sans modèle)
                          utilisant les capacités d’héritage des modèles Django.
                  Des hacks!
Les bonnes pratiques dans un projet pro


   La documentation d’un projet
   python/django
                  reStructuredText par l’exemple
                          les bonnes pratiques de la documentation
                          documentation des modules, des classes, des méthodes et
                          fonctions
                          les principaux mots clés de reStructuredText
                  Sphinx
                          présentation de l’outil
                          comment ça marche
                          comment l’utiliser dans un projet django
                  Le module “admindoc”
                          Principe de fonctionnement
                          cas d’utilisation
Les bonnes pratiques dans un projet pro


   Comment hériter correctement les
   templates

                  Par application
                          un dossier template
                          un fichier base.html
                          un dossier template/includes
                  Par Projet
                          Un dossier template
                          des dossiers par application sur-classées
                          penser “réutilisable”
Les patterns utiles



   L’héritage dans les modèles

                      Abstract
                          Des applications facilement surclassables
                      Multi-table
                          Moins de code/Plus de clarté
                      Proxy
                          Le plus oublié des héritages. . . Et pourtant!
                      Profitez de la souplesse de Python
                          Héritage de classes
                          Création de classes ou d’objet à la volée
                          Monkey patching: quand le besoin est impérieux
Exemple: Un blog ultra rapide.



   Un blog très rapidement : L’idée


                  Revoir en quelques lignes les grands concepts
                  Profiter de ce qu’une installation de base peut offrir
                  Le concept “Livré avec des piles” par l’exemple
                  un tour rapide sur les “contrib” que l’on oublie bien souvent
Exemple: Un blog ultra rapide.



   Initialisation



          $ django−admin . py s t a r t p r o j e c t b l o g g i n g
          $ cd b l o g g i n g
          $ python manage . py s t a r t a p p b l o g
Exemple: Un blog ultra rapide.



   Configuration: base de données


          # b l o g g i n g / b l o g g i n g / s e t t i n g s . py ( django >= 1 . 4 )
          DATABASES = {
                  ’ default ’ : {
                           ’ENGINE ’ : ’ django . db . backends . s q l i t e 3 ’ ,
                           ’NAME ’ : ’ d e v e l . db ’ ,
                  }
          }
Exemple: Un blog ultra rapide.



   Configuration: applications
          #blogging / blogging /          s e t t i n g s . py ( django >= 1 . 4 )
          INSTALLED_APPS = (
               ’ django . c o n t r i b   . auth ’ ,
               ’ django . c o n t r i b   . contenttypes ’ ,
               ’ django . c o n t r i b   . sessions ’ ,
               ’ django . c o n t r i b   . sites ’ ,
               ’ django . c o n t r i b   . messages ’ ,
               ’ django . c o n t r i b   . staticfiles ’ ,
               ’ django . c o n t r i b   . admin ’ ,
               ’ django . c o n t r i b   . admindocs ’ ,
               ’ django . c o n t r i b   . comments ’ ,
               ’ django . c o n t r i b   . sitemaps ’ ,
               ’ django . c o n t r i b   . syndication ’ ,
               ’ blog ’
           )
Exemple: Un blog ultra rapide.



   Configuration: urls
                  pattern de base
                  from django . c o n f . u r l s i m p o r t p a t t e r n s , i n c l u d e , u r l
                  from django . c o n t r i b i m p o r t admin
                  admin . a u t o d i s c o v e r ( )
                  u r l p a t t e r n s = p a t t e r n s ( ’ ’ , < i c i , l e s u r l s >)

                  L’application principale
                           u r l ( r ’ ^ blog / ’ , include ( ’ blog . u r l s ’ ) ) ,

                  La documentation Django
                           u r l ( r ’ ^ admin / doc / ’ ,
                                   i n c l u d e ( ’ django . c o n t r i b . admindocs . u r l s ’ ) ) ,

                  L’admin
                           u r l ( r ’ ^ admin / ’ , i n c l u d e ( admin . s i t e . u r l s ) ) ,

                  Les commentaires
                   u r l ( r ’ ^comments / ’ ,
                           i n c l u d e ( ’ django . c o n t r i b . comments . u r l s ’ ) ) ,
Exemple: Un blog ultra rapide.



   Les modèles : Catégorie

          # b l o g g i n g / b l o g / models . py

          from django . db i m p o r t models
          from django . c o n t r i b . auth . models i m p o r t User


          c l a s s C a t e g o r i e ( models . Model ) :
                  name = models . C h a r F i e l d ( max_length =250)
                  s l u g = models . S l u g F i e l d ( max_length =250)

                  d e f __unicode__ ( s e l f ) :
                        r e t u r n s e l f . name
Exemple: Un blog ultra rapide.



   Les models : les articles
          # b l o g g i n g / b l o g / models . py

          c l a s s A r t i c l e ( models . Model ) :
                   t i t l e = models . C h a r F i e l d ( max_length =250)
                  s l u g = models . S l u g F i e l d ( max_length =500)
                  a u t h o r = models . ForeignKey ( User )
                  c a t e g o r i e = models . ForeignKey ( C a t e g o r i e )
                  p u b l i s h e d _ d a t e = models . D a t e F i e l d ( auto_now_add=True )
                  c o n t e n t = models . T e x t F i e l d ( )

                  d e f __unicode__ ( s e l f ) :
                        return self . t i t l e

                  def get_absolute_url ( s e l f ) :
                      r e t u r n " / b l o g / a r t i c l e /%s " % s e l f . s l u g
Exemple: Un blog ultra rapide.



   Les urls: liste des derniers articles

                  Répondre à un besoin courant: lister les derniers objets
                          un model
                          un champ date.
                  # b l o g g i n g / b l o g / u r l s . py
                  urlpatterns = patterns ( ’ ’ ,
                          u r l ( r ’ ^$ ’ , ArchiveIndexView . as_view (
                                                   model= A r t i c l e ,
                                                    d a t e _ f i e l d =" published_date " ) ,
                                  name= ’ home ’ ) ,
                  )

                          et comme toujours on nomme les urls pour les utiliser dans
                          les templates
Exemple: Un blog ultra rapide.



   Les urls: Vue en liste

                  Les Articles
                          un seul argument: le modèle. Dans la “vraie vie”, on pagine.
                           url ( r ’^ articles /$ ’ ,
                                      L i s t V i e w . as_view ( model= A r t i c l e ) ,
                                name= ’ a r t i c l e s ’ ) ,

                  Les Catégories
                           u r l ( r ’ ^ categories / $ ’ ,
                                         L i s t V i e w . as_view ( model= C a t e g o r i e ) ,
                                  name= ’ c a t e g o r i e s ’ ) ,
Exemple: Un blog ultra rapide.



   Les urls: détails des objets

                  Les Articles
                          on utilise le slug pour construire les urls parce que les “pk”
                          c’est pas beau.
                           u r l ( r ’ a r t i c l e / ( ? P< slug > [  w−]+) / $ ’ ,
                                       D e t a i l V i e w . as_view ( model= A r t i c l e ) ,
                                  name= ’ a r t i c l e ’ ) ,

                  Les Catégories
                           u r l ( r ’ c a t e g o r i e / ( ? P< slug > [  w−]+) / $ ’ ,
                                       D e t a i l V i e w . as_view ( model= C a t e g o r i e ) ,
                                  name= ’ c a t e g o r i e ’ ) ,
Exemple: Un blog ultra rapide.



   L’admin
                  Une configuration très simple.
                          prepopulated_fields permet d’autogénérer le “slug” à partir
                          du titre.
                   from django . c o n t r i b i m p o r t admin
                   from b l o g . models i m p o r t Categorie , A r t i c l e


                   c l a s s A r t i c l e A d m i n ( admin . ModelAdmin ) :
                           prepopulated_fields = { " slug " : ( " t i t l e " , ) }


                   c l a s s CategorieAdmin ( admin . ModelAdmin ) :
                           p r e p o p u l a t e d _ f i e l d s = { " s l u g " : ( " name " , ) }


                  admin . s i t e . r e g i s t e r ( Categorie , CategorieAdmin )
                  admin . s i t e . r e g i s t e r ( A r t i c l e , A r t i c l e A d m i n )
Exemple: Un blog ultra rapide.



   Les templates : un menu

                  En utilisant “include”, le menu sera sur toutes les pages
                  Le menu est à un seul endroit clairement identifiable : DRY
                  les urls nommées sont utiles.

          # b l o g / t e m p l a t e s / i n c l u d e s / menu . h t m l
          <ul>
             < l i ><a h r e f = " {% u r l home %} " > A c c u e i l < / a>< / l i >
             < l i ><a h r e f = " {% u r l c a t e g o r i e s %} " > C a t g o r i e s < / a>< / l i >
             < l i ><a h r e f = " {% u r l a r t i c l e s %} " >Tous l e s a r t i c l e s < / a><
                      / li>
          </ ul>
Exemple: Un blog ultra rapide.



   Les templates : un article


                  la présentation d’un article se fait à un seul endroit.
                  les urls nommées acceptent des arguments

          #blog / templates / includes / prototype . html
          par < i > { { elem . a u t h o r } } < / i > dans l a c a t g o r i e
          <a h r e f = " {% u r l c a t e g o r i e elem . c a t e g o r i e . s l u g %} " >
             { { elem . c a t e g o r i e } }
          </a>
          <p > { { elem . c o n t e n t } } < / p>
Exemple: Un blog ultra rapide.


   Les templates : un fichier “base.html”
   minimal

                  tout ce qui doit être présenté sur toute les pages

          # b l o g / t e m p l a t e s / base . h t m l
          {% i n c l u d e " i n c l u d e s / menu . h t m l " %}
          {% b l o c k c o n t e n t %}
          {% endblock c o n t e n t %}

                  on peut créer autant de “placeholder” que l’on veut pour
                  structurer la page.
                          headers custom
                          footer
                          etc. . .
Exemple: Un blog ultra rapide.



   Les templates: vue “archive”

             1. convention over configuration
             2. nom du template : <nom du modèle>_archive.html

          {% extends " base . h t m l " %}
          {% b l o c k c o n t e n t %}
            {% f o r elem i n l a t e s t %}
              <h2>
                   <a h r e f = ’ {% u r l a r t i c l e elem . s l u g %} ’ >
                      { { elem . t i t l e } }
                   </a>
               </ h2>
              {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %}
            {% e n d f o r %}
          {% endblock c o n t e n t %}
Exemple: Un blog ultra rapide.



   Les templates: vue ArticleS

                  Une itération simple
                  {% extends " base . h t m l " %}
                  {% b l o c k c o n t e n t %}
                    {% f o r elem i n o b j e c t _ l i s t %}
                      <h2>
                           <a h r e f = ’ {% u r l a r t i c l e elem . s l u g %} ’ >
                              { { elem . t i t l e } }
                           </a>
                       </ h2>
                      {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %}
                    {% e n d f o r %}
                  {% endblock c o n t e n t %}
Exemple: Un blog ultra rapide.



   Les templates: CatégorieS
                  Itérations imbriquées.

                  {% extends " base . h t m l " %}
                  {% b l o c k c o n t e n t %}

                  {% f o r elem i n o b j e c t _ l i s t %}
                    <h2 > { { elem . name } } ( { { elem . a r t i c l e _ s e t . count } } ) </ h2>
                    {% f o r a r t i c l e i n elem . a r t i c l e _ s e t . a l l %}
                       <h3>
                          <a h r e f = ’ {% u r l a r t i c l e a r t i c l e . s l u g %} ’ >
                               {{ article . t i t l e }}
                          </a>
                       </ h3>
                    {% e n d f o r %}
                  {% e n d f o r %}

                  {% endblock c o n t e n t %}
Exemple: Un blog ultra rapide.



   Les templates: Article
                  load_comment charge les templatetags des commentaires
                  render_comment_list = liste des commentaires.
                  render_comment_form = formulaire de commentaire
                          CSRF_TOKEN, honeypot etc. . .
                          {% extends " base . h t m l " %}
                          {% l o a d comments %}
                          {% b l o c k c o n t e n t %}
                          {% w i t h o b j e c t as elem %}
                          {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %}
                          {% endwith %}
                          <h3>Commentaires< / h3>
                          {% r e n d e r _ c o m m e n t _ l i s t f o r o b j e c t %}
                          <h3> L a i s s e r un commentaire< / h3>
                          {% render_comment_form f o r o b j e c t %}
                          <a h r e f = " {% u r l a r t i c l e s %} " >
                              Retour           l a l i s t e des a r t i c l e s
                          < / a>
                          {% endblock c o n t e n t %}
Exemple: Un blog ultra rapide.



   Les templates: Catégorie

          {% extends " base . h t m l " %}
          {% b l o c k c o n t e n t %}
          <h2> { { o b j e c t . name } } ( { { o b j e c t . a r t i c l e _ s e t . count } } ) < / h2>
              {% f o r a r t i c l e i n o b j e c t . a r t i c l e _ s e t . a l l %}
                 <h3>
                     <a h r e f = ’{% u r l a r t i c l e a r t i c l e . s l u g %} ’>
                         {{ article . t i t l e }}
                     < / a>
                 < / h3>
              {% e n d f o r %}
          <a h r e f = " {% u r l c a t e g o r i e s %} " >
              Retour           l a l i s t e des c a t g o r i e s
          < / a>
          {% endblock c o n t e n t %}
Exemple: Un blog ultra rapide.



   Le Sitemap

          from django . c o n t r i b . sitemaps i m p o r t GenericSitemap

           info_dict = {
               ’ queryset ’ : A r t i c l e . objects . a l l ( ) ,
               ’ d a t e _ f i e l d ’ : ’ published_date ’ ,
           }

          sitemaps = {
               ’ b l o g ’ : GenericSitemap ( i n f o _ d i c t , p r i o r i t y = 0 . 6 ) ,
          }


           u r l ( r ’ ^ sitemap  . xml$ ’ , ’ django . c o n t r i b . sitemaps . views .
                  sitemap ’ ,
                   { ’ sitemaps ’ : sitemaps } ) ,
Exemple: Un blog ultra rapide.



   Les flux rss

          from django . c o n t r i b . s y n d i c a t i o n . views i m p o r t Feed
          c l a s s L a t e s t B l o g A r t i c l e ( Feed ) :
                   t i t l e = "Un super Blog "
                  l i n k = " / blog / "

                  def items ( s e l f ) :
                      r e t u r n A r t i c l e . o b j e c t s . order_by (
                                                ’− p u b l i s h e d _ d a t e ’ ) [ : 5 ]

                  def i t e m _ t i t l e ( s e l f , item ) :
                      r e t u r n item . t i t l e

                  def i t e m _ d e s c r i p t i o n ( s e l f , item ) :
                      r e t u r n item . content
Conclusion



  Questions



         Des questions ?
Conclusion



  Contacts



         yohann@gabory.fr // http://www.gabory.fr // @boblefrag
Conclusion



  Licence


             Présentation réalisée sous org-mode
             Theme Beamer sous licence GPLV3
             Présentation disponible sous Creative Commons
             Attribution - Partage dans les Mêmes Conditions 3.0 non
             transposé
             https://bitbucket.org/boblefrag/django-avanc-pr-sentation-
             du-5-novembre/

Mais conteúdo relacionado

Mais procurados

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScriptKristen Le Liboux
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en gokader15
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScriptAbdoulaye Dieng
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsAddi Ait-Mlouk
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPkemenaran
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Jean-Michel Doudoux
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012Jean-Michel Doudoux
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Scrapez facilement et gratuitement
Scrapez facilement et gratuitementScrapez facilement et gratuitement
Scrapez facilement et gratuitementMadeline Pinthon
 

Mais procurados (20)

Notions de base de JavaScript
Notions de base de JavaScriptNotions de base de JavaScript
Notions de base de JavaScript
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Introduction au Jquery
Introduction au JqueryIntroduction au Jquery
Introduction au Jquery
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Pratique de la programmation en go
Pratique de la programmation en goPratique de la programmation en go
Pratique de la programmation en go
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Cours javascript v1
Cours javascript v1Cours javascript v1
Cours javascript v1
 
Introduction à JavaScript
Introduction à JavaScriptIntroduction à JavaScript
Introduction à JavaScript
 
Introduction à React
Introduction à ReactIntroduction à React
Introduction à React
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
Procédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windowsProcédure de configuration et préparation de l’environnement sous windows
Procédure de configuration et préparation de l’environnement sous windows
 
Formation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHPFormation PHP avancé - Cake PHP
Formation PHP avancé - Cake PHP
 
Javascript
JavascriptJavascript
Javascript
 
Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8Voxxdays luxembourg 2016 retours java 8
Voxxdays luxembourg 2016 retours java 8
 
"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012"Input/Ouput, 16 ans après" à Devoxx France 2012
"Input/Ouput, 16 ans après" à Devoxx France 2012
 
Cours php
Cours phpCours php
Cours php
 
Introduction à Symfony
Introduction à SymfonyIntroduction à Symfony
Introduction à Symfony
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Scrapez facilement et gratuitement
Scrapez facilement et gratuitementScrapez facilement et gratuitement
Scrapez facilement et gratuitement
 

Destaque

Presentation pfe gestion parc informatique et help desk
Presentation pfe gestion parc informatique et help deskPresentation pfe gestion parc informatique et help desk
Presentation pfe gestion parc informatique et help deskRaef Ghribi
 
Actividad final semana VIII Programa Licenciatura en Ingles
Actividad final semana VIII Programa Licenciatura en InglesActividad final semana VIII Programa Licenciatura en Ingles
Actividad final semana VIII Programa Licenciatura en InglesMaria Garcia
 
Le CTI, un organisme de formation professionnelle pas comme les autres
Le CTI, un organisme de formation professionnelle pas comme les autresLe CTI, un organisme de formation professionnelle pas comme les autres
Le CTI, un organisme de formation professionnelle pas comme les autresBastien Chayvialle
 
Birds' high fashion show
Birds' high fashion show   Birds' high fashion show
Birds' high fashion show Sofija J.
 
VII FORO DE LA JUSTICIA ( Programa )
VII FORO DE LA JUSTICIA  ( Programa )VII FORO DE LA JUSTICIA  ( Programa )
VII FORO DE LA JUSTICIA ( Programa )Ausbanc Asociación
 
Signalisation maritime
Signalisation maritimeSignalisation maritime
Signalisation maritimeJm Sygut
 
Charlie chaplin (1)
Charlie chaplin (1)Charlie chaplin (1)
Charlie chaplin (1)Chams Ch
 
Patrocinos 2012 Torneo Golf Rotario Mty
Patrocinos 2012 Torneo Golf Rotario MtyPatrocinos 2012 Torneo Golf Rotario Mty
Patrocinos 2012 Torneo Golf Rotario MtyBasilio Karamanos
 
Yannick Geoffroy
Yannick GeoffroyYannick Geoffroy
Yannick Geoffroyyannoux
 
Modeste Zoubabela Message Au Peuple
Modeste Zoubabela Message Au PeupleModeste Zoubabela Message Au Peuple
Modeste Zoubabela Message Au Peupleguestb6a6099
 
Design for Social Business: Colombia
Design for Social Business: ColombiaDesign for Social Business: Colombia
Design for Social Business: ColombiaTiago Dias Miranda
 
Reglamento de organización y funcionamiento
Reglamento de organización y funcionamientoReglamento de organización y funcionamiento
Reglamento de organización y funcionamientoCEIP CIudad de Belda
 
Platine - Plaquette commerciale
Platine - Plaquette commercialePlatine - Plaquette commerciale
Platine - Plaquette commercialePlatine
 
Experiments
ExperimentsExperiments
Experimentslabartra
 
Mécanicien de la marine
Mécanicien de la marineMécanicien de la marine
Mécanicien de la marineFERRERE
 
Inscription des electeurs_avril_2015 par section communale
Inscription des electeurs_avril_2015 par section communaleInscription des electeurs_avril_2015 par section communale
Inscription des electeurs_avril_2015 par section communaleDaniel Alouidor
 

Destaque (20)

Presentation pfe gestion parc informatique et help desk
Presentation pfe gestion parc informatique et help deskPresentation pfe gestion parc informatique et help desk
Presentation pfe gestion parc informatique et help desk
 
Rapport de stage du fin d'étude
Rapport de stage du fin d'étudeRapport de stage du fin d'étude
Rapport de stage du fin d'étude
 
Actividad final semana VIII Programa Licenciatura en Ingles
Actividad final semana VIII Programa Licenciatura en InglesActividad final semana VIII Programa Licenciatura en Ingles
Actividad final semana VIII Programa Licenciatura en Ingles
 
Colegio ignacio carrera pinto
Colegio ignacio carrera pintoColegio ignacio carrera pinto
Colegio ignacio carrera pinto
 
Le CTI, un organisme de formation professionnelle pas comme les autres
Le CTI, un organisme de formation professionnelle pas comme les autresLe CTI, un organisme de formation professionnelle pas comme les autres
Le CTI, un organisme de formation professionnelle pas comme les autres
 
Birds' high fashion show
Birds' high fashion show   Birds' high fashion show
Birds' high fashion show
 
VII FORO DE LA JUSTICIA ( Programa )
VII FORO DE LA JUSTICIA  ( Programa )VII FORO DE LA JUSTICIA  ( Programa )
VII FORO DE LA JUSTICIA ( Programa )
 
Signalisation maritime
Signalisation maritimeSignalisation maritime
Signalisation maritime
 
Charlie chaplin (1)
Charlie chaplin (1)Charlie chaplin (1)
Charlie chaplin (1)
 
Patrocinos 2012 Torneo Golf Rotario Mty
Patrocinos 2012 Torneo Golf Rotario MtyPatrocinos 2012 Torneo Golf Rotario Mty
Patrocinos 2012 Torneo Golf Rotario Mty
 
Yannick Geoffroy
Yannick GeoffroyYannick Geoffroy
Yannick Geoffroy
 
Modeste Zoubabela Message Au Peuple
Modeste Zoubabela Message Au PeupleModeste Zoubabela Message Au Peuple
Modeste Zoubabela Message Au Peuple
 
Design for Social Business: Colombia
Design for Social Business: ColombiaDesign for Social Business: Colombia
Design for Social Business: Colombia
 
Reglamento de organización y funcionamiento
Reglamento de organización y funcionamientoReglamento de organización y funcionamiento
Reglamento de organización y funcionamiento
 
Platine - Plaquette commerciale
Platine - Plaquette commercialePlatine - Plaquette commerciale
Platine - Plaquette commerciale
 
Clase de conociendo mi barranquilla
Clase de conociendo mi barranquillaClase de conociendo mi barranquilla
Clase de conociendo mi barranquilla
 
Experiments
ExperimentsExperiments
Experiments
 
Mécanicien de la marine
Mécanicien de la marineMécanicien de la marine
Mécanicien de la marine
 
Honestidad
HonestidadHonestidad
Honestidad
 
Inscription des electeurs_avril_2015 par section communale
Inscription des electeurs_avril_2015 par section communaleInscription des electeurs_avril_2015 par section communale
Inscription des electeurs_avril_2015 par section communale
 

Semelhante a Presentation du Livre Django Avancé

Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Guillaume RICHARD
 
Usage des blogs dans les bibliothèques
Usage des blogs dans les bibliothèquesUsage des blogs dans les bibliothèques
Usage des blogs dans les bibliothèquesAref Jdey
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalDuchess France
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_finalagnes_crepet
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017Artusamak
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Normandie Web Xperts
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet DrupalAdyax
 
Détecter et nettoyer le contenu générique
Détecter et nettoyer le contenu génériqueDétecter et nettoyer le contenu générique
Détecter et nettoyer le contenu génériquebenoit chevillot
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisantcluelessjoe
 
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisFocus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisErlé Alberton
 
Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.frliberation_dev
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010François Wauquier
 
Découvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceDécouvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceLINAGORA
 
Quelle galerie photo en ligne pour votre projet ?
Quelle galerie photo en ligne pour votre projet ?Quelle galerie photo en ligne pour votre projet ?
Quelle galerie photo en ligne pour votre projet ?StrasWeb
 

Semelhante a Presentation du Livre Django Avancé (20)

Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
Comment récupérer un projet Web pourri ... et réussir à travailler dessus.
 
Chapter1
Chapter1Chapter1
Chapter1
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Usage des blogs dans les bibliothèques
Usage des blogs dans les bibliothèquesUsage des blogs dans les bibliothèques
Usage des blogs dans les bibliothèques
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
Design poo togo_jug_final
Design poo togo_jug_finalDesign poo togo_jug_final
Design poo togo_jug_final
 
On test quoi - DCLannion 2017
On test quoi - DCLannion 2017On test quoi - DCLannion 2017
On test quoi - DCLannion 2017
 
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony...
 
Tutoriel java
Tutoriel javaTutoriel java
Tutoriel java
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet Drupal
 
Détecter et nettoyer le contenu générique
Détecter et nettoyer le contenu génériqueDétecter et nettoyer le contenu générique
Détecter et nettoyer le contenu générique
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
DDD, CQRS et Event Sourcing : quand coder propre n'est plus suffisant
 
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisFocus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
 
Des poneys à Liberation.fr
Des poneys à Liberation.frDes poneys à Liberation.fr
Des poneys à Liberation.fr
 
Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010Domain Driven Design - Agile France 2010
Domain Driven Design - Agile France 2010
 
Découvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référenceDécouvrir Drupal, le CMS Open Source de référence
Découvrir Drupal, le CMS Open Source de référence
 
Quelle galerie photo en ligne pour votre projet ?
Quelle galerie photo en ligne pour votre projet ?Quelle galerie photo en ligne pour votre projet ?
Quelle galerie photo en ligne pour votre projet ?
 

Presentation du Livre Django Avancé

  • 1. [center] Django Avancé Yohann Gabory
  • 2. Présentation de l’auteur Yohann Gabory Webdevelopper Outscale Auteur chez Eyrolles Djangonaute depuis la version 0.95
  • 3. Présentation de l’auteur Collaboration Préface de Nicolas Ferrari, co-fondateur d’alwaysdata (https://www.alwaysdata.com/) Relecture de Thomas Petillon, consultant senior IT et expert python/django Éditions Eyrolles
  • 4. Pourquoi un livre en français ? Aider les nouveaux arrivants Le premier contact est plus facile en français Le succès d’un outil tient à sa documentation La documentation française n’est plus à jour depuis looooongtemps
  • 5. Pourquoi un livre en français ? Proposer de nouvelles choses Le framework a beaucoup évolué depuis les parutions anglophones C’est un framework de plus en plus largement utilisé Il est temps d’aller plus loin Les CBV Les “Reusable Apps” Les besoins ont changé API, Oauth etc. . .
  • 6. Pourquoi un livre en français ? “Apprendre la programmation web avec Python et Django” Un livre didactique pour les débutants Les base de la programmation web Les notions essentielles Mise en application avec Django
  • 7. Un avant-goût du contenu du livre Des tutoriels Un Bug Tracker Parce que les bonnes pratiques se prennent dès le départ Un Agenda Partagé Tremble Google Agenda, les poneys arrivent! Des exemples de “la vraie vie” Parce c’est au pied du mur. . . Une volonté d’aller au fond des choses
  • 8. Un avant-goût du contenu du livre Des bonnes pratiques Comment structurer ses modèles quels type d’héritage utiliser où mettre la logique de votre application Le principe du DRY : partout Dans les urls, les modèles, les vues, les templates. Un seul endroit oui mais clairement identifiable: surtout! Découplez! Identifiez les usages Une application == une fonctionalité Écrivez “plug’n play” Les bonnes façons de résoudre les problèmes
  • 9. Un avant-goût du contenu du livre Des exemples avancés une API Oauth2 avec Tastypie et Slumber un serveur d’API un client. une revue des verbes HTTP: GET, POST, PUT, DELETE, HEAD, PATCH. . . une application de prototypage sans modèle un bon exemple d’application réutilisable (sans modèle) utilisant les capacités d’héritage des modèles Django. Des hacks!
  • 10. Les bonnes pratiques dans un projet pro La documentation d’un projet python/django reStructuredText par l’exemple les bonnes pratiques de la documentation documentation des modules, des classes, des méthodes et fonctions les principaux mots clés de reStructuredText Sphinx présentation de l’outil comment ça marche comment l’utiliser dans un projet django Le module “admindoc” Principe de fonctionnement cas d’utilisation
  • 11. Les bonnes pratiques dans un projet pro Comment hériter correctement les templates Par application un dossier template un fichier base.html un dossier template/includes Par Projet Un dossier template des dossiers par application sur-classées penser “réutilisable”
  • 12. Les patterns utiles L’héritage dans les modèles Abstract Des applications facilement surclassables Multi-table Moins de code/Plus de clarté Proxy Le plus oublié des héritages. . . Et pourtant! Profitez de la souplesse de Python Héritage de classes Création de classes ou d’objet à la volée Monkey patching: quand le besoin est impérieux
  • 13. Exemple: Un blog ultra rapide. Un blog très rapidement : L’idée Revoir en quelques lignes les grands concepts Profiter de ce qu’une installation de base peut offrir Le concept “Livré avec des piles” par l’exemple un tour rapide sur les “contrib” que l’on oublie bien souvent
  • 14. Exemple: Un blog ultra rapide. Initialisation $ django−admin . py s t a r t p r o j e c t b l o g g i n g $ cd b l o g g i n g $ python manage . py s t a r t a p p b l o g
  • 15. Exemple: Un blog ultra rapide. Configuration: base de données # b l o g g i n g / b l o g g i n g / s e t t i n g s . py ( django >= 1 . 4 ) DATABASES = { ’ default ’ : { ’ENGINE ’ : ’ django . db . backends . s q l i t e 3 ’ , ’NAME ’ : ’ d e v e l . db ’ , } }
  • 16. Exemple: Un blog ultra rapide. Configuration: applications #blogging / blogging / s e t t i n g s . py ( django >= 1 . 4 ) INSTALLED_APPS = ( ’ django . c o n t r i b . auth ’ , ’ django . c o n t r i b . contenttypes ’ , ’ django . c o n t r i b . sessions ’ , ’ django . c o n t r i b . sites ’ , ’ django . c o n t r i b . messages ’ , ’ django . c o n t r i b . staticfiles ’ , ’ django . c o n t r i b . admin ’ , ’ django . c o n t r i b . admindocs ’ , ’ django . c o n t r i b . comments ’ , ’ django . c o n t r i b . sitemaps ’ , ’ django . c o n t r i b . syndication ’ , ’ blog ’ )
  • 17. Exemple: Un blog ultra rapide. Configuration: urls pattern de base from django . c o n f . u r l s i m p o r t p a t t e r n s , i n c l u d e , u r l from django . c o n t r i b i m p o r t admin admin . a u t o d i s c o v e r ( ) u r l p a t t e r n s = p a t t e r n s ( ’ ’ , < i c i , l e s u r l s >) L’application principale u r l ( r ’ ^ blog / ’ , include ( ’ blog . u r l s ’ ) ) , La documentation Django u r l ( r ’ ^ admin / doc / ’ , i n c l u d e ( ’ django . c o n t r i b . admindocs . u r l s ’ ) ) , L’admin u r l ( r ’ ^ admin / ’ , i n c l u d e ( admin . s i t e . u r l s ) ) , Les commentaires u r l ( r ’ ^comments / ’ , i n c l u d e ( ’ django . c o n t r i b . comments . u r l s ’ ) ) ,
  • 18. Exemple: Un blog ultra rapide. Les modèles : Catégorie # b l o g g i n g / b l o g / models . py from django . db i m p o r t models from django . c o n t r i b . auth . models i m p o r t User c l a s s C a t e g o r i e ( models . Model ) : name = models . C h a r F i e l d ( max_length =250) s l u g = models . S l u g F i e l d ( max_length =250) d e f __unicode__ ( s e l f ) : r e t u r n s e l f . name
  • 19. Exemple: Un blog ultra rapide. Les models : les articles # b l o g g i n g / b l o g / models . py c l a s s A r t i c l e ( models . Model ) : t i t l e = models . C h a r F i e l d ( max_length =250) s l u g = models . S l u g F i e l d ( max_length =500) a u t h o r = models . ForeignKey ( User ) c a t e g o r i e = models . ForeignKey ( C a t e g o r i e ) p u b l i s h e d _ d a t e = models . D a t e F i e l d ( auto_now_add=True ) c o n t e n t = models . T e x t F i e l d ( ) d e f __unicode__ ( s e l f ) : return self . t i t l e def get_absolute_url ( s e l f ) : r e t u r n " / b l o g / a r t i c l e /%s " % s e l f . s l u g
  • 20. Exemple: Un blog ultra rapide. Les urls: liste des derniers articles Répondre à un besoin courant: lister les derniers objets un model un champ date. # b l o g g i n g / b l o g / u r l s . py urlpatterns = patterns ( ’ ’ , u r l ( r ’ ^$ ’ , ArchiveIndexView . as_view ( model= A r t i c l e , d a t e _ f i e l d =" published_date " ) , name= ’ home ’ ) , ) et comme toujours on nomme les urls pour les utiliser dans les templates
  • 21. Exemple: Un blog ultra rapide. Les urls: Vue en liste Les Articles un seul argument: le modèle. Dans la “vraie vie”, on pagine. url ( r ’^ articles /$ ’ , L i s t V i e w . as_view ( model= A r t i c l e ) , name= ’ a r t i c l e s ’ ) , Les Catégories u r l ( r ’ ^ categories / $ ’ , L i s t V i e w . as_view ( model= C a t e g o r i e ) , name= ’ c a t e g o r i e s ’ ) ,
  • 22. Exemple: Un blog ultra rapide. Les urls: détails des objets Les Articles on utilise le slug pour construire les urls parce que les “pk” c’est pas beau. u r l ( r ’ a r t i c l e / ( ? P< slug > [ w−]+) / $ ’ , D e t a i l V i e w . as_view ( model= A r t i c l e ) , name= ’ a r t i c l e ’ ) , Les Catégories u r l ( r ’ c a t e g o r i e / ( ? P< slug > [ w−]+) / $ ’ , D e t a i l V i e w . as_view ( model= C a t e g o r i e ) , name= ’ c a t e g o r i e ’ ) ,
  • 23. Exemple: Un blog ultra rapide. L’admin Une configuration très simple. prepopulated_fields permet d’autogénérer le “slug” à partir du titre. from django . c o n t r i b i m p o r t admin from b l o g . models i m p o r t Categorie , A r t i c l e c l a s s A r t i c l e A d m i n ( admin . ModelAdmin ) : prepopulated_fields = { " slug " : ( " t i t l e " , ) } c l a s s CategorieAdmin ( admin . ModelAdmin ) : p r e p o p u l a t e d _ f i e l d s = { " s l u g " : ( " name " , ) } admin . s i t e . r e g i s t e r ( Categorie , CategorieAdmin ) admin . s i t e . r e g i s t e r ( A r t i c l e , A r t i c l e A d m i n )
  • 24. Exemple: Un blog ultra rapide. Les templates : un menu En utilisant “include”, le menu sera sur toutes les pages Le menu est à un seul endroit clairement identifiable : DRY les urls nommées sont utiles. # b l o g / t e m p l a t e s / i n c l u d e s / menu . h t m l <ul> < l i ><a h r e f = " {% u r l home %} " > A c c u e i l < / a>< / l i > < l i ><a h r e f = " {% u r l c a t e g o r i e s %} " > C a t g o r i e s < / a>< / l i > < l i ><a h r e f = " {% u r l a r t i c l e s %} " >Tous l e s a r t i c l e s < / a>< / li> </ ul>
  • 25. Exemple: Un blog ultra rapide. Les templates : un article la présentation d’un article se fait à un seul endroit. les urls nommées acceptent des arguments #blog / templates / includes / prototype . html par < i > { { elem . a u t h o r } } < / i > dans l a c a t g o r i e <a h r e f = " {% u r l c a t e g o r i e elem . c a t e g o r i e . s l u g %} " > { { elem . c a t e g o r i e } } </a> <p > { { elem . c o n t e n t } } < / p>
  • 26. Exemple: Un blog ultra rapide. Les templates : un fichier “base.html” minimal tout ce qui doit être présenté sur toute les pages # b l o g / t e m p l a t e s / base . h t m l {% i n c l u d e " i n c l u d e s / menu . h t m l " %} {% b l o c k c o n t e n t %} {% endblock c o n t e n t %} on peut créer autant de “placeholder” que l’on veut pour structurer la page. headers custom footer etc. . .
  • 27. Exemple: Un blog ultra rapide. Les templates: vue “archive” 1. convention over configuration 2. nom du template : <nom du modèle>_archive.html {% extends " base . h t m l " %} {% b l o c k c o n t e n t %} {% f o r elem i n l a t e s t %} <h2> <a h r e f = ’ {% u r l a r t i c l e elem . s l u g %} ’ > { { elem . t i t l e } } </a> </ h2> {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %} {% e n d f o r %} {% endblock c o n t e n t %}
  • 28. Exemple: Un blog ultra rapide. Les templates: vue ArticleS Une itération simple {% extends " base . h t m l " %} {% b l o c k c o n t e n t %} {% f o r elem i n o b j e c t _ l i s t %} <h2> <a h r e f = ’ {% u r l a r t i c l e elem . s l u g %} ’ > { { elem . t i t l e } } </a> </ h2> {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %} {% e n d f o r %} {% endblock c o n t e n t %}
  • 29. Exemple: Un blog ultra rapide. Les templates: CatégorieS Itérations imbriquées. {% extends " base . h t m l " %} {% b l o c k c o n t e n t %} {% f o r elem i n o b j e c t _ l i s t %} <h2 > { { elem . name } } ( { { elem . a r t i c l e _ s e t . count } } ) </ h2> {% f o r a r t i c l e i n elem . a r t i c l e _ s e t . a l l %} <h3> <a h r e f = ’ {% u r l a r t i c l e a r t i c l e . s l u g %} ’ > {{ article . t i t l e }} </a> </ h3> {% e n d f o r %} {% e n d f o r %} {% endblock c o n t e n t %}
  • 30. Exemple: Un blog ultra rapide. Les templates: Article load_comment charge les templatetags des commentaires render_comment_list = liste des commentaires. render_comment_form = formulaire de commentaire CSRF_TOKEN, honeypot etc. . . {% extends " base . h t m l " %} {% l o a d comments %} {% b l o c k c o n t e n t %} {% w i t h o b j e c t as elem %} {% i n c l u d e " i n c l u d e s / p r o t o t y p e . h t m l " %} {% endwith %} <h3>Commentaires< / h3> {% r e n d e r _ c o m m e n t _ l i s t f o r o b j e c t %} <h3> L a i s s e r un commentaire< / h3> {% render_comment_form f o r o b j e c t %} <a h r e f = " {% u r l a r t i c l e s %} " > Retour l a l i s t e des a r t i c l e s < / a> {% endblock c o n t e n t %}
  • 31. Exemple: Un blog ultra rapide. Les templates: Catégorie {% extends " base . h t m l " %} {% b l o c k c o n t e n t %} <h2> { { o b j e c t . name } } ( { { o b j e c t . a r t i c l e _ s e t . count } } ) < / h2> {% f o r a r t i c l e i n o b j e c t . a r t i c l e _ s e t . a l l %} <h3> <a h r e f = ’{% u r l a r t i c l e a r t i c l e . s l u g %} ’> {{ article . t i t l e }} < / a> < / h3> {% e n d f o r %} <a h r e f = " {% u r l c a t e g o r i e s %} " > Retour l a l i s t e des c a t g o r i e s < / a> {% endblock c o n t e n t %}
  • 32. Exemple: Un blog ultra rapide. Le Sitemap from django . c o n t r i b . sitemaps i m p o r t GenericSitemap info_dict = { ’ queryset ’ : A r t i c l e . objects . a l l ( ) , ’ d a t e _ f i e l d ’ : ’ published_date ’ , } sitemaps = { ’ b l o g ’ : GenericSitemap ( i n f o _ d i c t , p r i o r i t y = 0 . 6 ) , } u r l ( r ’ ^ sitemap . xml$ ’ , ’ django . c o n t r i b . sitemaps . views . sitemap ’ , { ’ sitemaps ’ : sitemaps } ) ,
  • 33. Exemple: Un blog ultra rapide. Les flux rss from django . c o n t r i b . s y n d i c a t i o n . views i m p o r t Feed c l a s s L a t e s t B l o g A r t i c l e ( Feed ) : t i t l e = "Un super Blog " l i n k = " / blog / " def items ( s e l f ) : r e t u r n A r t i c l e . o b j e c t s . order_by ( ’− p u b l i s h e d _ d a t e ’ ) [ : 5 ] def i t e m _ t i t l e ( s e l f , item ) : r e t u r n item . t i t l e def i t e m _ d e s c r i p t i o n ( s e l f , item ) : r e t u r n item . content
  • 34. Conclusion Questions Des questions ?
  • 35. Conclusion Contacts yohann@gabory.fr // http://www.gabory.fr // @boblefrag
  • 36. Conclusion Licence Présentation réalisée sous org-mode Theme Beamer sous licence GPLV3 Présentation disponible sous Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 non transposé https://bitbucket.org/boblefrag/django-avanc-pr-sentation- du-5-novembre/