Download - Presentation du Livre Django Avancé
![Page 1: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/1.jpg)
[center]
Django Avancé
Yohann Gabory
![Page 2: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/2.jpg)
Présentation de l’auteur
Yohann GaboryWebdevelopper Outscale
Auteur chez Eyrolles
Djangonaute depuis la version 0.95
![Page 3: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/3.jpg)
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 etexpert python/djangoÉditions Eyrolles
![Page 4: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/4.jpg)
Pourquoi un livre en français ?
Aider les nouveaux arrivants
Le premier contact est plus facile en françaisLe succès d’un outil tient à sa documentationLa documentation française n’est plus à jour depuislooooongtemps
![Page 5: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/5.jpg)
Pourquoi un livre en français ?
Proposer de nouvelles choses
Le framework a beaucoup évolué depuis les parutionsanglophonesC’est un framework de plus en plus largement utiliséIl est temps d’aller plus loin
Les CBVLes “Reusable Apps”Les besoins ont changé API, Oauth etc. . .
![Page 6: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/6.jpg)
Pourquoi un livre en français ?
“Apprendre la programmation webavec Python et Django”
Un livre didactique pour les débutantsLes base de la programmation webLes notions essentiellesMise en application avec Django
![Page 7: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/7.jpg)
Un avant-goût du contenu du livre
Des tutoriels
Un Bug TrackerParce 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
![Page 8: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/8.jpg)
Un avant-goût du contenu du livre
Des bonnes pratiques
Comment structurer ses modèlesquels type d’héritage utiliseroù mettre la logique de votre application
Le principe du DRY : partoutDans les urls, les modèles, les vues, les templates.Un seul endroit oui mais clairement identifiable: surtout!
Découplez!Identifiez les usagesUne application == une fonctionalitéÉcrivez “plug’n play”
Les bonnes façons de résoudre les problèmes
![Page 9: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/9.jpg)
Un avant-goût du contenu du livre
Des exemples avancés
une API Oauth2 avec Tastypie et Slumberun serveur d’APIun 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!
![Page 10: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/10.jpg)
Les bonnes pratiques dans un projet pro
La documentation d’un projetpython/django
reStructuredText par l’exempleles bonnes pratiques de la documentationdocumentation des modules, des classes, des méthodes etfonctionsles principaux mots clés de reStructuredText
Sphinxprésentation de l’outilcomment ça marchecomment l’utiliser dans un projet django
Le module “admindoc”Principe de fonctionnementcas d’utilisation
![Page 11: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/11.jpg)
Les bonnes pratiques dans un projet pro
Comment hériter correctement lestemplates
Par applicationun dossier templateun fichier base.htmlun dossier template/includes
Par ProjetUn dossier templatedes dossiers par application sur-classéespenser “réutilisable”
![Page 12: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/12.jpg)
Les patterns utiles
L’héritage dans les modèles
AbstractDes applications facilement surclassables
Multi-tableMoins de code/Plus de clarté
ProxyLe plus oublié des héritages. . . Et pourtant!
Profitez de la souplesse de PythonHéritage de classesCréation de classes ou d’objet à la voléeMonkey patching: quand le besoin est impérieux
![Page 13: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/13.jpg)
Exemple: Un blog ultra rapide.
Un blog très rapidement : L’idée
Revoir en quelques lignes les grands conceptsProfiter de ce qu’une installation de base peut offrirLe concept “Livré avec des piles” par l’exempleun tour rapide sur les “contrib” que l’on oublie bien souvent
![Page 14: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/14.jpg)
Exemple: Un blog ultra rapide.
Initialisation
$ django−admin . py s t a r t p r o j e c t b logg ing$ cd blogging$ python manage . py s ta r tapp blog
![Page 15: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/15.jpg)
Exemple: Un blog ultra rapide.
Configuration: base de données
#blogging / b logg ing / s e t t i n g s . py ( django >= 1 .4 )DATABASES = {
’ d e f a u l t ’ : {’ENGINE ’ : ’ django . db . backends . s q l i t e 3 ’ ,’NAME ’ : ’ devel . db ’ ,
}}
![Page 16: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/16.jpg)
Exemple: Un blog ultra rapide.
Configuration: applications
#blogging / b logg ing / 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 . content types ’ ,’ django . c o n t r i b . sessions ’ ,’ django . c o n t r i b . s i t e s ’ ,’ django . c o n t r i b . messages ’ ,’ django . c o n t r i b . s t a t i c f i l e s ’ ,’ 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 . synd i ca t i on ’ ,’ b log ’
)
![Page 17: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/17.jpg)
Exemple: Un blog ultra rapide.
Configuration: urlspattern de basefrom django . conf . u r l s impor t pa t te rns , inc lude , u r lfrom django . c o n t r i b impor t adminadmin . autod iscover ( )u r l p a t t e r n s = pa t te rns ( ’ ’ , < i c i , l es u r l s >)
L’application principaleu r l ( r ’ ^ blog / ’ , i nc lude ( ’ b log . u r l s ’ ) ) ,
La documentation Djangou r l ( r ’ ^admin / doc / ’ ,
i nc lude ( ’ django . c o n t r i b . admindocs . u r l s ’ ) ) ,
L’adminu r l ( r ’ ^admin / ’ , i nc lude ( admin . s i t e . u r l s ) ) ,
Les commentairesu r l ( r ’ ^comments / ’ ,
i nc lude ( ’ django . c o n t r i b . comments . u r l s ’ ) ) ,
![Page 18: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/18.jpg)
Exemple: Un blog ultra rapide.
Les modèles : Catégorie
#blogging / blog / models . py
from django . db impor t modelsfrom django . c o n t r i b . auth . models impor t User
c lass Categor ie ( models . Model ) :name = models . CharFie ld ( max_length =250)s lug = models . S lugF ie ld ( max_length =250)
def __unicode__ ( s e l f ) :r e t u r n s e l f . name
![Page 19: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/19.jpg)
Exemple: Un blog ultra rapide.
Les models : les articles
#blogging / blog / models . py
c lass A r t i c l e ( models . Model ) :t i t l e = models . CharFie ld ( max_length =250)s lug = models . S lugF ie ld ( max_length =500)author = models . ForeignKey ( User )ca tegor ie = models . ForeignKey ( Categor ie )publ ished_date = models . DateFie ld ( auto_now_add=True )content = models . Tex tF ie ld ( )
def __unicode__ ( s e l f ) :r e t u r n s e l f . t i t l e
def ge t_abso lu te_u r l ( s e l f ) :r e t u r n " / b log / a r t i c l e /%s " % s e l f . s lug
![Page 20: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/20.jpg)
Exemple: Un blog ultra rapide.
Les urls: liste des derniers articles
Répondre à un besoin courant: lister les derniers objetsun modelun champ date.
#blogging / blog / u r l s . pyu r l p a t t e r n s = pa t te rns ( ’ ’ ,
u r l ( r ’ ^$ ’ , ArchiveIndexView . as_view (model= A r t i c l e ,d a t e _ f i e l d =" publ ished_date " ) ,
name= ’home ’ ) ,)
et comme toujours on nomme les urls pour les utiliser dansles templates
![Page 21: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/21.jpg)
Exemple: Un blog ultra rapide.
Les urls: Vue en liste
Les Articlesun seul argument: le modèle. Dans la “vraie vie”, on pagine.
u r l ( r ’ ^ a r t i c l e s / $ ’ ,L is tV iew . 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 ’ ^ ca tegor ies / $ ’ ,L is tV iew . as_view ( model=Categor ie ) ,
name= ’ ca tegor ies ’ ) ,
![Page 22: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/22.jpg)
Exemple: Un blog ultra rapide.
Les urls: détails des objets
Les Articleson 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− ]+) / $ ’ ,Deta i lV iew . 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 ’ ca tegor ie / ( ?P<slug > [ \w− ]+) / $ ’ ,Deta i lV iew . as_view ( model=Categor ie ) ,
name= ’ ca tegor ie ’ ) ,
![Page 23: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/23.jpg)
Exemple: Un blog ultra rapide.
L’adminUne configuration très simple.
prepopulated_fields permet d’autogénérer le “slug” à partirdu titre.
from django . c o n t r i b impor t adminfrom blog . models impor t Categorie , A r t i c l e
c lass Ar t i c leAdmin ( admin . ModelAdmin ) :p repopu la ted_ f i e l ds = { " s lug " : ( " t i t l e " , ) }
c lass CategorieAdmin ( admin . ModelAdmin ) :p repopu la ted_ f i e l ds = { " s lug " : ( "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 , Ar t i c leAdmin )
![Page 24: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/24.jpg)
Exemple: Un blog ultra rapide.
Les templates : un menu
En utilisant “include”, le menu sera sur toutes les pagesLe menu est à un seul endroit clairement identifiable : DRYles urls nommées sont utiles.
#blog / templates / inc ludes / menu . html< u l >
< l i ><a h re f = " {% u r l home %}">Accue i l< / a>< / l i >< l i ><a h re f = " {% u r l ca tegor ies %}"> C a t g o r i e s < / a>< / l i >< l i ><a h re f = " {% u r l a r t i c l e s %}">Tous les a r t i c l e s < / a><
/ l i >< / u l >
![Page 25: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/25.jpg)
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 / inc ludes / p ro to type . htmlpar < i > { { elem . author } } < / i > dans l a c a t g o r i e<a h re f = " {% u r l ca tegor ie elem . ca tegor ie . s lug %}">
{ { elem . ca tegor ie } }</a><p > { { elem . content } } < / p>
![Page 26: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/26.jpg)
Exemple: Un blog ultra rapide.
Les templates : un fichier “base.html”minimal
tout ce qui doit être présenté sur toute les pages
#blog / templates / base . html{% inc lude " inc ludes / menu . html " %}{% block content %}{% endblock content %}
on peut créer autant de “placeholder” que l’on veut pourstructurer la page.
headers customfooteretc. . .
![Page 27: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/27.jpg)
Exemple: Un blog ultra rapide.
Les templates: vue “archive”
1. convention over configuration2. nom du template : <nom du modèle>_archive.html
{% extends " base . html " %}{% block content %}
{% f o r elem i n l a t e s t %}<h2>
<a h re f = ’ {% u r l a r t i c l e elem . s lug %} ’>{ { elem . t i t l e } }
</a></h2>{% inc lude " inc ludes / p ro to type . html " %}
{% endfor %}{% endblock content %}
![Page 28: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/28.jpg)
Exemple: Un blog ultra rapide.
Les templates: vue ArticleS
Une itération simple
{% extends " base . html " %}{% block content %}
{% f o r elem i n o b j e c t _ l i s t %}<h2>
<a h re f = ’ {% u r l a r t i c l e elem . s lug %} ’>{ { elem . t i t l e } }
</a></h2>{% inc lude " inc ludes / p ro to type . html " %}
{% endfor %}{% endblock content %}
![Page 29: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/29.jpg)
Exemple: Un blog ultra rapide.
Les templates: CatégorieSItérations imbriquées.
{% extends " base . html " %}{% block content %}
{% 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 re f = ’ {% u r l a r t i c l e a r t i c l e . s lug %} ’>
{ { a r t i c l e . t i t l e } }</a>
</h3>{% endfor %}
{% endfor %}
{% endblock content %}
![Page 30: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/30.jpg)
Exemple: Un blog ultra rapide.
Les templates: Articleload_comment charge les templatetags des commentairesrender_comment_list = liste des commentaires.render_comment_form = formulaire de commentaire
CSRF_TOKEN, honeypot etc. . .
{% extends " base . html " %}{% load comments %}{% block content %}{% wi th ob jec t as elem %}{% inc lude " inc ludes / p ro to type . html " %}{% endwith %}<h3>Commentaires< / h3>{% render_comment_l is t f o r ob jec t %}<h3>La isser un commentaire< / h3>{% render_comment_form f o r ob jec t %}<a h re 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 content %}
![Page 31: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/31.jpg)
Exemple: Un blog ultra rapide.
Les templates: Catégorie
{% extends " base . html " %}{% block content %}<h2> { { ob jec t . name } } ( { { ob jec 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 ob jec t . a r t i c l e _ s e t . a l l %}<h3>
<a h re f = ’{% u r l a r t i c l e a r t i c l e . s lug %} ’>{ { a r t i c l e . t i t l e } }
< / a>< / h3>
{% endfor %}<a h re f = " {% u r l ca tegor ies %}">
Retour l a l i s t e des c a t g o r i e s< / a>{% endblock content %}
![Page 32: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/32.jpg)
Exemple: Un blog ultra rapide.
Le Sitemap
from django . c o n t r i b . sitemaps impor t GenericSitemap
i n f o _ d i c t = {’ queryset ’ : A r t i c l e . ob jec ts . a l l ( ) ,’ d a t e _ f i e l d ’ : ’ publ ished_date ’ ,
}
sitemaps = {’ b log ’ : 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 ’ ,{ ’ si temaps ’ : sitemaps } ) ,
![Page 33: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/33.jpg)
Exemple: Un blog ultra rapide.
Les flux rss
from django . c o n t r i b . synd i ca t i on . views impor t Feedc lass 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 = " / b log / "
def i tems ( s e l f ) :r e t u r n A r t i c l e . ob jec ts . order_by (
’−publ ished_date ’ ) [ : 5 ]
def i t e m _ t i t l e ( s e l f , i tem ) :r e t u r n i tem . t i t l e
def i t em_desc r i p t i on ( s e l f , i tem ) :r e t u r n i tem . content
![Page 34: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/34.jpg)
Conclusion
Questions
Des questions ?
![Page 36: Presentation du Livre Django Avancé](https://reader034.vdocuments.pub/reader034/viewer/2022042700/5586f030d8b42afa4b8b4699/html5/thumbnails/36.jpg)
Conclusion
Licence
Présentation réalisée sous org-modeTheme Beamer sous licence GPLV3Présentation disponible sous Creative CommonsAttribution - Partage dans les Mêmes Conditions 3.0 nontransposéhttps://bitbucket.org/boblefrag/django-avanc-pr-sentation-du-5-novembre/