Django

Apéro Python Lyon

Arthur Vuillard

22 mai 2013

whois speaker

  • Travailleur indépendant
  • Développeur python/web/openerp
  • A fait du web en XML (enfin, Java)

Disclaimer

  • Développeur web, mais peu avec Django
  • 2 projets Django professionnellement

Django ?

django_unchainged.jpg

Django ?

django_reinhardt.jpg

Django !

django_ponies.jpg

Framework web ?

Ensemble d'outils et de conventions permettant de mettre en place un cadre dans lequel on va pourvoir réaliser une application web.

—Moi

Django, framework web

  • Outils de gestion du cycle de vie du projet
  • ORM intégré
  • interface d'aministration dynamique
  • architecture Modèle Vue Controlleur
    • gestion des urls
    • définition des vues
    • template (moteur intégré)

Version, trucs

Installation

  • pacman -S python-django
  • pip install Django
  • apt-get install python-django
  • yum install Django

Cycle de vie

# initialisation d'un projet
$ django-admin3.py startproject mysite

$ find m
mysite
mysite/manage.py
mysite/mysite
mysite/mysite/settings.py
mysite/mysite/urls.py
mysite/mysite/wsgi.py
mysite/mysite/__init__.py

Cycle de vie

# initialisation d'une app
$ cd mysite
$ python manage.py startapp polls

# initialisation de la base
$ python manage.py syncdb

# lancement de l'application
$ python manage.py runserver

https://docs.djangoproject.com/en/dev/ref/django-admin/

Configuration

  • Accès aux bases de données
  • Applications installées
  • Chemin divers et variés
  • Options de timezone
  • Logging

Configuration

vim mysite/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'mysite.db',
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

Création d'un modèle

Dans mysite/polls/models.py :

from django.db import models

class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')

class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice_text = models.CharField(max_length=200)
    votes = models.IntegerField(default=0)

Interface d'administration

En trois étapes :
  • activer au niveau de l'application
  • activer pour notre model
  • ajouter l'url au niveau de l'application
admin.png

Création d'une vue

Ajout d'une url dans mysite/mysite/urls.py :

from django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
     url(r'^$', views.index, name='index')
)

Création d'une vue

Ajout du contrôlleur dans mysite/polls/views.py :

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world !")

Création d'une vue

Utilisation d'un template dans le contrôlleur:

from django.shortcuts import render

def index(request):
    context = {'value': 42}
    return render(request, 'mon_template.html', context)

Fichier template :

{% if value > 42 %}
Trop grand !
{% elif value < 42 %}
Trop petit !
{% else %}
Trop parfait !
{% endif %}

Et c'est tout ?

NON

Et c'est tout ?

Inclus :
  • Formulaires
  • Authentification
  • Mise en cache
  • Pagination
  • Sessions
  • ...

Et c'est tout ?

Batteries non inclues :
  • gestion du schéma de base de données (South)
  • APIs REST
  • bases de données non relationnelles
  • données géographiques
  • ...

Pourquoi l'utiliser ?

  • tout en un
  • très bien documenté
  • communauté énorme et active
  • Python 3
  • apprentissage rapide

Pourquoi je ne l'utilise pas ?

  • conventions trop pesantes
  • ORM limité
  • moteur de template limité
  • interface d'administration compliquée à surcharger

Des remarques ? Des questions ?

Merci !

Django :
Moi :