Introduction aux développement sous Django

1 Introduction

1.1 Historique

À l'automne 2003, les développeurs de World Online (Adrian Holovaty et Simon Willison) ont abandonné PHP et ont commencé à utiliser Python pour développer leurs sites Web. Comme ils ont construit des sites riches et interactifs, ils ont commencé à extraire un cadre générique de développement Web (framework) qui leur permettait de construire des applications Web de plus en plus rapidement. Ils ont modifié ce framework en permanence, en ajoutant des améliorations sur deux ans.

À l'été 2005, World Online a décidé de publier le framework en open source, ce qui donna naissance au projet Django. Django ne serait pas possible sans une multitude de projets open source -Apache, Python et PostgreSQL pour n'en nommer que quelques-uns.

1.2 Motivation du cours

Nous avons choisi d'utiliser un framework Web, plutôt qu'un framework applicatif (comme JEE), car les fonctionnalités et les concepts que nous souhaitons aborder dans ce cours se retrouvent tous dans les frameworks Web. Pas la peine de passer à JEE pour n'en utiliser qu'une sous-partie réduite, mais qui demande de connaître toutes les bases (complexes et nombreuses)… Bien sûr, il est possible d'utiliser un cadre comme JEE (avec uniquement les API Web) pour développer les applications de ce cours. Les concepts clés (comme le modèle MVC) seront toujours utiles dans la plupart des autres frameworks.

Il existe de nombreux frameworks web, dans différents langages de programmation. Pourquoi utiliser spécifiquement Django et pas un autre ?

  • La simplicité d’apprentissage
  • La qualité des applications réalisées
  • La rapidité de développement
  • La sécurité du site Internet final
  • La facilité de maintenance des applications sur la durée

On bénéficie également de la clarté de Python, qui permet à plusieurs développeurs de travailler sur le même projet. Le style est imposé, donc tout le monde suit les mêmes règles, ce qui facilite les travaux en équipe et la clarté du code.

1.3 Quel environnement de programmation ?

Django étant écrit en python, un simple environnement de travail avec python installé suffit. Une console en ligne de commande peut faire largement l'affaire. Par contre, s'il on veut avoir une vision projet claire, l'utilisation d'un IDE comme Eclipse (avec le plugin PyDev) devient souvent nécessaire lorsque la taille des projets augmentent.

Dans cette formation nous aborderons à la fois le développement avec les outils en ligne de commande ainsi que l'usage d'Eclipse.

De plus, pour que le projet passe à l'échelle il faudra certainement déployer un serveur de base de données comme PostgreSQL (voir https://docs.djangoproject.com/en/1.4/ref/databases/ pour plus de détail) et un serveur d'application web comme Apache (voir https://docs.djangoproject.com/en/1.4/howto/deployment/wsgi/modwsgi/ pour plus de détail)

2 Gestion de projet Django sous Eclipse (plugin PyDev)

Le plugin PyDev que nous avons utilisé pour python gère également les projets Django sous Eclipse.

Il y a peu de chose à savoir pour l'utilisation de ce plugin. En fait, il offre des raccourcis vers la plupart des commandes offertes par les scripts django-admin et manage.py. Il permet également d'utiliser la console interactive Django.

2.1 Exercice

Familiarisez-vous avec le plugin en suivant le court tutoriel officiel : http://pydev.org/manual_adv_django.html

3 Prise en main de Django avec le tutoriel officiel

Encore une fois, le tutoriel officiel de Django est très bien fait et assez complet. Il couvre principalement les aspects suivants :

  • création et gestion de projets Django
  • gestion des couches Model, View et Control
  • gestion du site d'administration

Le tutoriel suit le développement d'un site de sondage (à la doodle). L'idée pour ce cours et de suivre ce tutoriel et, en parallèle, de commencer à développer votre propre application. Pensez-donc bien à gérer deux projets en parallèle (sous Eclipse, ce sera plus simple).

Le tutoriel se décompose en quatre parties :

  • Part 1 : création de projet, de modèles et accès au modèle
  • Part 2 : site d'administration
  • Part 3 : couche control avec urls.py et views.py
  • Part 4 : couche view avec les templates, les formulaires et les vues génériques

3.1 Création et gestion d'un projet

Django fournit des utilitaires en ligne de commande pour gérer les projets Django (le plug-in Eclipse pydev en propose des raccourcis).

Les principales commandes à connaître sont django-admin qui est une commande django générique et manage.py qui est un script python généré pour chaque projet.

La structure et le contenu du projet seront :

mysite/ 
    manage.py
    mysite/
        monapp/
            __init__.py
            models.py
            tests.py
            views.py
        __init__.py
        settings.py
        urls.py
        wsgi.py

Voici quelques commandes de base :

  • Pour démarrer un nouveau projet et créer la structure de base :
django-admin.py startproject <site>
  • Création d’un répertoire qui contient les fichiers d’une application :
python manage.py startapp <application>
  • Shell interactif Python pour interagir avec l’API Django :
python manage.py shell
  • Pour démarrer le serveur de développement sur un port spécifique :
python manage.py runserver <port>
  • Création toutes les tables nécessaires aux applications listées dans le réglage INSTALLED_APPS de settings.py :
python manage.py syncdb
  • Vérification des erreurs de modèles :
python manage.py validate
  • Création des tables décrites dans le modèle (ex: <application>/models.py) :
python manage.py sql <application>
  • Instructions SQL spécifiques qui sont définies pour l’application :
python manage.py sqlcustom <application>
  • Instructions DROP TABLE nécessaires pour cette application, compte tenu des tables qui existent déjà :
python manage.py sqlclear <application>
  • Instructions CREATE INDEX pour cette application :
python manage.py sqlindexes <application>
  • Combinaison des instructions SQL des commandes sql, sqlcustom et sqlindexes :
python manage.py sqlall <application>

3.2 Exercice

Suivez la première étape de la première partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet : Creating a project (en choisissant sqlite comme SGBD)

3.3 Modèle de données relationnel sous Django (Modèle)

La couche modèle est principalement abordée dans la première et la deuxième partie du tutoriel.

Pour plus d'info sur la couche modèle, vous pourrez également consulter les sources suivantes :

Création des modèles

La mise en oeuvre de la couche modèle dans Django passe par la spécialisation de la classe Model. Ainsi, lorsque l'on veut définir une classe comme appartenant au modèle (stéréotypée <<entity>>), il faut qu'elle hérite de Model. Les classes modèles sont habituellement placées dans le module models.py.

Exercice

Suivez la deuxième étape de la première partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet : Creating models.

Activation des modèles

Une fois ces modèles mis en place, il faut les activer en modifiant le champs INSTALLED_APPS du fichier settings.py.

Ensuite, on peut créer les tables correspondantes dans la base de données avec la commande et les manipuler avec les commandes présentées ci-dessus.

Exercice

Suivez la troisième étape de la première partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet : Activating models.

Manipulation des données depuis la console

Il est également possible de manipuler le modèle depuis un shell python (python manage.py shell).

Exercice

Suivez la quatrième étape de la première partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet : Playing with the API.

Site d'administration

Enfin, Django offre une fonctionnalité d'administration du modèle (et éventuellement des utilisateurs). Pour cela, il faut activer la fonctionnalité d'administration et et y abonner les modèles.

Exercice

Suivez la deuxième partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet dans son intégralité.

3.4 Les views sous Django (Contrôleur)

Dans Django, la couche contrôle est mise en oeuvre par un mécanisme définition d'URL (urls.py) et d'assignation de méthodes (views.py) en réponse aux requêtes HTTP sur ces URLs.

La troisième partie du tutoriel explore cette couche (tout en nécessitant également une part de développement de la couche vue avec les templates).

Pour plus d'info sur la couche contrôle, vous pourrez également consulter les sources suivantes :

Exercice

Suivez la troisième partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet dans son intégralité.

3.5 Les templates sous Django (Vue)

Dans Django, la vue est mise en oeuvre par un ensemble de templates de pages HTML qui sont instanciés puis affiché en fonction des décisions de la couche de contrôle.

Pour plus d'info sur la couche vue, vous pourrez également consulter les sources suivantes :

Exercice

Suivez la quatrième partie du tutoriel à la fois pour le projet du tutoriel et pour votre projet dans son intégralité.

4 Principes avancés

Voici quelques rubriques qu'il peut être intéressant d'explorer en fonction des besoins de votre projet :

Point technique délicat

Le point concernant la communication enter Django et Android est assez délicat. En effet, il nécessite de mettre en place un service RESTful sur le serveur Django et de communiquer avec lui par requêtes HTTP depuis le mobile Android pour récupérer les résultats de requêtes. L'authentification peut-être délicate à mettre en place, donc faites sans dans un premier temps


Gauthier Picard, October 2012