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 CONFIDENTIELLE
jeudi 28 février 13
10. Python
•Existe depuis 1989
•Langague dynamique et oritenté object
•Syntaxe simple et élégante
•Librarie standard complète
source : http://en.wikipedia.org/wiki/Python_(programming_language) Copyright Reptiletech 2013
jeudi 28 février 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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
16. Pourquoi choisir Django
Robuste, Performant et Sécuritaire
Trois belles qualités pour une plateforme de
développement web!
Copyright Reptiletech 2013
jeudi 28 février 13
17. ORM
Dites au revoir au SQL!
Copyright Reptiletech 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 quoi
source : https://docs.djangoproject.com/en/1.5/topics/templates/ Copyright Reptiletech 2013
jeudi 28 février 13
32. URLS
Grâce aux expressions régulières,
tout est possible!
Copyright Reptiletech 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
38. Views
C’est par là que ça se passe!
(dernier morceau du casse tête)
Copyright Reptiletech 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13
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 2013
jeudi 28 février 13