Introduction aux développement sous Django
Table des matières
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 :
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
desettings.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
etsqlindexes
:
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 :
- Authentification des utilisateurs : https://docs.djangoproject.com/en/1.4/topics/auth/
- Envoi d'emails : https://docs.djangoproject.com/en/1.4/topics/email/
- Charger des fichiers : https://docs.djangoproject.com/en/1.4/topics/http/file-uploads/
- Géolocalisation avec OpenStreetMap : https://docs.djangoproject.com/en/1.4/ref/contrib/gis/
- Gérer les sessions utilisateurs : https://docs.djangoproject.com/en/1.4/topics/http/sessions/
- Communiquer avec Django en RESTful (notamment depuis Android) :
- Avec Piston :
- Tutoriel officiel : https://bitbucket.org/jespern/django-piston/wiki/Documentation#!getting-started
- Avec Tastypie :
- tutorial officiel Tastypie : http://django-tastypie.readthedocs.org/en/latest/tutorial.html
- un exemple assez simple côté Django : http://thecodachi.blogspot.fr/2012/03/django-tastypie-with-android-client.html
- un exemple assez simple côté Android : http://thecodachi.blogspot.fr/2012/04/django-tastypie-with-android-client.html
- authentification : http://django-tastypie.readthedocs.org/en/latest/authentication_authorization.html
- Côté Android
- un exemple d'accès à Twitter en REST : http://neilgoodman.net/2011/12/26/modern-techniques-for-implementing-rest-clients-on-android-4-0-and-below-part-1/
- un autre exemple de client REST sous Android : http://ericosgood.com/prog/rest-webservice-android/
- Avec Piston :
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