Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen...
-
Upload
normandie-web-xperts -
Category
Technology
-
view
633 -
download
0
description
Transcript of Conférence #nwxtech5 : Django, du framework pour les perfectionnistes au pony powered par Goulwen...
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
“Get an H:pRequest, return an H:pResponse”
Contrat de base
Les grandes fonc9onnalités
• Ac9ve Record
ORM
Les grandes fonc9onnalités
• Ac9ve Record • Syntaxe déclara9ve en Python
ORM
Les grandes fonc9onnalités
# 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)
ORM
Les grandes fonc9onnalités
• 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 protected]) User.objects.get(first_name=Chuck, last_name=Norris)
ORM
Les grandes fonc9onnalités
• 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"])
ORM
Les grandes fonc9onnalités
• 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)
ORM
Les grandes fonc9onnalités
• On manipule vraiment des objets Python : -‐ Récupérer les 3 premiers : User.objects.all()[:3]
ORM
Les grandes fonc9onnalités
• 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 formulaires
Les grandes fonc9onnalités
# 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 formulaires
Les grandes fonc9onnalités
• 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 templates
Les grandes fonc9onnalités
<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 templates
Les atouts
• Ze killer feature • >> admin symfony pourtant déjà top
L’admin
Les atouts
• Un énorme écosystème d'apps réu9lisables (comme drupal ou Wordpress, la qualité en plus :p)
• djangopackages.com, Pypi, github, etc.
Reusable apps
Les atouts
• Python a une Standard lib très vaste, bien structurée et de très bonne qualité.
• PyPi complète encore au besoin.
It's just Python
Les atouts
• N'importe quel module/package Python peut être u9lisé :
>>> from __future__ import braces File "<stdin>", line 1 SyntaxError: not a chance >>>
ou presque !
It's just Python
Les atouts
• 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
Concevez des infras
Les points faibles
• Pas énormément de ressources en France (mais un pe9t groupe bien sympathique)
Moins connu que Symfony ou même RoR
Les points faibles
• Async en possible en Python (gevent, Tornado, Twisted)
• Mais du coup, pas django • Redis is your friend
NodeJS
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