Introduction à Django                La plateforme de développement web pour                  les perfectionnistes avec de...
BENOIT                      DOMINGUE                        @bedingue                                    Copyright Reptile...
jeudi 28 février 13
jeudi 28 février 13
jeudi 28 février 13
jeudi 28 février 13
jeudi 28 février 13
jeudi 28 février 13
C’est quoi Django ?                          Django is a high-level Python Web                          framework that enc...
Python                          •Existe depuis 1989                          •Langague dynamique et oritenté object       ...
import antigravity source : httphttp://xkcd.com/353/jeudi 28 février 13
Qui utilise Django                                           Copyright Reptiletech 2013jeudi 28 février 13
Pourquoi choisir Django         ORM Simple et puissant         Parce qu’en 2013, on a pas besoin d’écrire du SQL         C...
Pourquoi choisir Django           Gabarits avec héritage           L’héritage dans les templates simplifie le html         ...
Pourquoi choisir Django           Design d’URL simple           Aucune limitation au niveau de la structure des URL       ...
Pourquoi choisir Django           Robuste, Performant et Sécuritaire           Trois belles qualités pour une plateforme d...
ORM                      Dites au revoir au SQL!                                                Copyright Reptiletech 2013...
ORM      Exemple d’un modèle - Blog simple                                    class Blog(models.Model):                   ...
ORM      Requêtes Simples                                     all_entries = Entry.objects.all()                           ...
ORM      Requêtes - suite                          Entry.objects.filter(pub_date__year=2006)                          Entr...
ORM      Instance d’un modèle         entry = Entry.objects.get(id=1)         blog = entry.blog         entry_authors = en...
Admin                      Le pouvoir le l’introspection                                                      Copyright Re...
Admin      Console d’administrations simples                                                  from django.contrib import a...
Admin      Console d’administration - options                           class UserAdmin(ModelAdmin):                      ...
Admin      Console d’administration - options suite                      • inlines                                     • l...
Templates                       L’héritage au service du HTML                                ré-utilisable                ...
Templates      Templates - Syntaxe                                                                   {{ une_variable }}   ...
Templates - héritage      Template de base                   <!DOCTYPE html>                   <html lang="en">           ...
Templates - héritage      Template qui profite de l’héritage                                           {% extends "base.htm...
Templates      Templates - Tags et filtres                                {% extends "base_generic.html" %}                ...
Templates      Templates - Pour aller plus loin...          Ajouter un filtre          Il s’agit simplement d’une fonction ...
URLS                      Grâce aux expressions régulières,                              tout est possible!               ...
URLS      Exemple simple          from django.conf.urls import patterns          urlpatterns = patterns(,              (r^...
URLS      Autre exemple          from django.conf.urls import patterns          urlpatterns = patterns(,              (r^a...
URLS      Dans les templates          from django.conf.urls import patterns          urlpatterns = patterns(,             ...
URLS      Dans les templates                                  from django.conf.urls import patterns                       ...
URLS      Dans les templates                         from django.conf.urls import patterns                         urlpatt...
Views                        C’est par là que ça se passe!                      (dernier morceau du casse tête)           ...
Views      Deux responsabilités                                    Préparer les données                                   ...
Views      Exemple        from django.shortcuts import get_object_or_404, render_to_response        def article_detail(req...
Views      Exemple          urlpatterns = patterns(,              (r^articles/(?P<slug>[w-]+)/$, articles.views.article_de...
Views      Decorators        from django.contrib.auth.decorators import login_required        @login_required        def a...
Démo!                              Copyright Reptiletech 2013jeudi 28 février 13
MERCI!                               Copyright Reptiletech 2013jeudi 28 février 13
Upcoming SlideShare
Loading in …5
×

Introduction à Django

1,450 views

Published on

Introduction à Django présentée à Confoo 2013.

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

No Downloads
Views
Total views
1,450
On SlideShare
0
From Embeds
0
Number of Embeds
50
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Introduction à Django

  1. 1. Introduction à Django La plateforme de développement web pour les perfectionnistes avec des livrables. présenté parjeudi 28 février 13
  2. 2. BENOIT DOMINGUE @bedingue Copyright Reptiletech 2013jeudi 28 février 13
  3. 3. jeudi 28 février 13
  4. 4. jeudi 28 février 13
  5. 5. jeudi 28 février 13
  6. 6. jeudi 28 février 13
  7. 7. jeudi 28 février 13
  8. 8. jeudi 28 février 13
  9. 9. C’est quoi Django ? Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design.source : https://www.djangoproject.com/ 22 OCTOBRE 2012 > REPTILETECH Reptiletech 2013 Copyright CONFIDENTIELLEjeudi 28 février 13
  10. 10. Python •Existe depuis 1989 •Langague dynamique et oritenté object •Syntaxe simple et élégante •Librarie standard complètesource : http://en.wikipedia.org/wiki/Python_(programming_language) Copyright Reptiletech 2013jeudi 28 février 13
  11. 11. import antigravity source : httphttp://xkcd.com/353/jeudi 28 février 13
  12. 12. Qui utilise Django Copyright Reptiletech 2013jeudi 28 février 13
  13. 13. Pourquoi choisir Django ORM Simple et puissant Parce qu’en 2013, on a pas besoin d’écrire du SQL Console Administration Permet de se lier à la base de donnée facilement Copyright Reptiletech 2013jeudi 28 février 13
  14. 14. Pourquoi choisir Django Gabarits avec héritage L’héritage dans les templates simplifie le html Internationalisation + localisation Outils intégrés pour la traduction et la localisation Copyright Reptiletech 2013jeudi 28 février 13
  15. 15. Pourquoi choisir Django Design d’URL simple Aucune limitation au niveau de la structure des URL Cache Peut s’intégrer facilement avec memcached Copyright Reptiletech 2013jeudi 28 février 13
  16. 16. Pourquoi choisir Django Robuste, Performant et Sécuritaire Trois belles qualités pour une plateforme de développement web! Copyright Reptiletech 2013jeudi 28 février 13
  17. 17. ORM Dites au revoir au SQL! Copyright Reptiletech 2013jeudi 28 février 13
  18. 18. ORM Exemple d’un modèle - Blog simple class Blog(models.Model): name = models.CharField(max_length=100) tagline = models.TextField() class Author(models.Model): name = models.CharField(max_length=50) email = models.EmailField() class Entry(models.Model): blog = models.ForeignKey(Blog) headline = models.CharField(max_length=255) body_text = models.TextField() pub_date = models.DateField() mod_date = models.DateField() authors = models.ManyToManyField(Author)source : https://docs.djangoproject.com/en/dev/topics/db/queries/ Copyright Reptiletech 2013jeudi 28 février 13
  19. 19. ORM Requêtes Simples all_entries = Entry.objects.all() SELECT * FROM ...; Entry.objects.get(headline="Man bites dog") SELECT ... WHERE headline = Man bites dog; Entry.objects.get(headline__contains=Lennon) SELECT ... WHERE headline LIKE %Lennon%;source : https://docs.djangoproject.com/en/dev/topics/db/queries/ Copyright Reptiletech 2013jeudi 28 février 13
  20. 20. ORM Requêtes - suite Entry.objects.filter(pub_date__year=2006) Entry.objects.filter(blog__name__exact=Beatles Blog) Blog.objects.filter(entry__headline__contains=Lennon) Blog.objects.filter(entry__authors__name=John) Blog.objects.filter(entry__authors__name__isnull=True)source : https://docs.djangoproject.com/en/dev/topics/db/queries/ Copyright Reptiletech 2013jeudi 28 février 13
  21. 21. ORM Instance d’un modèle entry = Entry.objects.get(id=1) blog = entry.blog entry_authors = entry.authors blog_entries = blog.entries_set.all() author = Author.objects.get(email="bdomigue@reptiletech.com") author_entries = author.entry_set.all() recent_author_entries = author.entry_set.filter(pub_date__year=2006)source : https://docs.djangoproject.com/en/dev/topics/db/queries/ Copyright Reptiletech 2013jeudi 28 février 13
  22. 22. Admin Le pouvoir le l’introspection Copyright Reptiletech 2013jeudi 28 février 13
  23. 23. Admin Console d’administrations simples from django.contrib import admin from myproject.myapp.models import Author class AuthorAdmin(admin.ModelAdmin): pass admin.site.register(Author, AuthorAdmin)source : https://docs.djangoproject.com/en/1.5/ref/contrib/admin/ Copyright Reptiletech 2013jeudi 28 février 13
  24. 24. Admin Console d’administration - options class UserAdmin(ModelAdmin): list_filter = (is_staff, is_superuser) list_display = (username, email, first_name, last_name, is_staff) search_fields = (first_name, last_name, email)source : https://docs.djangoproject.com/en/1.5/ref/contrib/admin/ Copyright Reptiletech 2013jeudi 28 février 13
  25. 25. Admin Console d’administration - options suite • inlines • list_editable • fields • ordering • fieldsets • form • readonly_fields • etc.source : https://docs.djangoproject.com/en/1.5/ref/contrib/admin/ Copyright Reptiletech 2013jeudi 28 février 13
  26. 26. Templates L’héritage au service du HTML ré-utilisable Copyright Reptiletech 2013jeudi 28 février 13
  27. 27. Templates Templates - Syntaxe {{ une_variable }} {% un_tag %}source : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013jeudi 28 février 13
  28. 28. Templates - héritage Template de base <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="style.css" /> <title>{% block title %}My amazing site{% endblock %}</title> </head> <body> <div id="sidebar"> {% block sidebar %} <ul> <li><a href="/">Home</a></li> <li><a href="/blog/">Blog</a></li> </ul> {% endblock %} </div> <div id="content"> {% block content %}{% endblock %} </div> </body> </html>source : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013jeudi 28 février 13
  29. 29. Templates - héritage Template qui profite de l’héritage {% extends "base.html" %} {% block title %}My amazing blog{% endblock %} {% block content %} {% for entry in blog_entries %} <h2>{{ entry.title }}</h2> <p>{{ entry.body }}</p> {% endfor %} {% endblock %}source : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013jeudi 28 février 13
  30. 30. Templates Templates - Tags et filtres {% extends "base_generic.html" %} {% block title %}{{ section.title }}{% endblock %} {% block content %} <h1>{{ section.title }}</h1> {% for story in story_list %} <h2> <a href="{{ story.get_absolute_url }}"> {{ story.headline|upper }} </a> </h2> <p>{{ story.tease|truncatewords:"100" }}</p> {% endfor %} {% endblock %}source : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013jeudi 28 février 13
  31. 31. Templates Templates - Pour aller plus loin... Ajouter un filtre Il s’agit simplement d’une fonction Ajouter un tag On sous classe le tag et on peut faire n’importe quoisource : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013jeudi 28 février 13
  32. 32. URLS Grâce aux expressions régulières, tout est possible! Copyright Reptiletech 2013jeudi 28 février 13
  33. 33. URLS Exemple simple from django.conf.urls import patterns urlpatterns = patterns(, (r^blog/$, blog.views.page), (r^blog/page(?P<num>d+)/$, blog.views.page), ) # View (in blog/views.py) def page(request, num="1"): # Output the appropriate page of blog entries, according to num.source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  34. 34. URLS Autre exemple from django.conf.urls import patterns urlpatterns = patterns(, (r^articles/(d{4})/$, news.views.year_archive), (r^articles/(d{4})/(d{2})/$, news.views.month_archive), (r^articles/(d{4})/(d{2})/(d+)/$, news.views.article_detail), )source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  35. 35. URLS Dans les templates from django.conf.urls import patterns urlpatterns = patterns(, (r^articles/(d{4})/(d{2})/$, news.views.month_archive), ) {% extends "base.html" %} {% block content %} <a href="{% url news.views.month_archive 2013 03 %}"> Lien vers les articles de mars 2013 </a> {% endblock %}source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  36. 36. URLS Dans les templates from django.conf.urls import patterns urlpatterns = patterns(, url(r^articles/(d{4})/(d{2})/$, news.views.month_archive, name="article_archive"), ) {% extends "base.html" %} {% block content %} <a href="{% url article_archive 2013 03 %}"> Lien vers les articles de mars 2013 </a> {% endblock %}source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  37. 37. URLS Dans les templates from django.conf.urls import patterns urlpatterns = patterns(, url(r^articles/(?P<year>d{4})/(?P<month>d{2})/$, news.views.month_archive, name="article_archive"),) {% extends "base.html" %} {% block content %} <a href="{% url article_archive month=03 year=2013 %}"> Lien vers les articles de mars 2013 </a> {% endblock %}source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  38. 38. Views C’est par là que ça se passe! (dernier morceau du casse tête) Copyright Reptiletech 2013jeudi 28 février 13
  39. 39. Views Deux responsabilités Préparer les données - Faire les requêtes à la BDD - Valider les formulaires - Logique propre à l’application Renvoyer une réponse - Rediriger - Renvoyer un document html - etc.source : https://docs.djangoproject.com/en/1.5/topics/http/views/ Copyright Reptiletech 2013jeudi 28 février 13
  40. 40. Views Exemple from django.shortcuts import get_object_or_404, render_to_response def article_detail(request, slug): article = get_object_or_404(Article, slug=slug) return render_to_response(article/detail.html, {article: article})source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  41. 41. Views Exemple urlpatterns = patterns(, (r^articles/(?P<slug>[w-]+)/$, articles.views.article_detail), ) {% extends "base.html" %} {% block content %} <a href="{% url article_detail slug=mon-article %}"> Lien vers mon article </a> {% endblock %} from django.shortcuts import get_object_or_404, render_to_response def article_detail(request, slug): article = get_object_or_404(Article, slug=slug) return render_to_response(article/detail.html, {article: article})source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  42. 42. Views Decorators from django.contrib.auth.decorators import login_required @login_required def article_detail(request, slug): article = get_object_or_404(Article, slug=slug) return render_to_response(article/detail.html, {article: article}) from django.views.decorators.cache import cache_page @cache_page(60 * 15) def article_detail(request): article = get_object_or_404(Article, slug=slug) return render_to_response(article/detail.html, {article: article})source : https://docs.djangoproject.com/en/1.5/topics/http/urls/ Copyright Reptiletech 2013jeudi 28 février 13
  43. 43. Démo! Copyright Reptiletech 2013jeudi 28 février 13
  44. 44. MERCI! Copyright Reptiletech 2013jeudi 28 février 13

×