Ce projet a été créé pour la présentation intitulée Développer un site web ou solution métier avec Django : introduction, réalisée le mercredi 24 juillet 2024.
- 🔗 Lien vers l'évènement et les inscriptions : Django Rennes art, Bashville swing
- 🔗 Lien vers le groupe de la communauté : Meetup Python Rennes
-
Quentin Caron : Technical Lead chez Néosoft Rennes
-
Profile LinkedIn : https://www.linkedin.com/in/qcaron/
-
Présentation : Développer un site ou solution métier web avec Django : introduction
-
Description : Django est un framework web Python vieux de 19 ans. Il est aujourd'hui le deuxième framework le plus populaire selon la Developer Survey 2023 de StackOverflow, juste derrière Flask et au coude-à-coude avec FastAPI sortit il y a 6 ans seulement.
Je vais tenter de vous convaincre que Django est toujours, en 2024, un bon choix pour vos projets web surtout si vous ne souhaitez pas vous encombrer de React et consorts pour le côté front-end (👀 htmx).
Je commencerai par vous présenter le framework afin de comprendre sa philosophie et son fonctionnement. Puis, nous construirons une application étape par étape, en suivant le paradigme MVC (Model-View-Controller) ainsi qu'en manipulant une base de données
sqlite
via l'ORM (Object Relational Mapper).
- installer poetry dans votre Python 3.12 :
python3 -m pip install poetry
- créer l'environnement virtuel depuis la racine du projet :
python3 -m poetry install [--with dev]
Installez l'environnement virtuel avec l'option --with dev
pour travailler facilement sur le projet en local.
Les dépendances telles que pre-commit
et pylint
seront ainsi installés et votre code sera vérifié à chaque commit.
Pour installer les hooks chez vous, vous devez exécuter la commande suivante : poetry run pre-commit install
. Pour
en savoir plus, allez voir le fichier .pre-commit-config
à la racine du projet et rendez-vous sur
pre-commit.com.
- à la récupération du projet, faire passer les migrations pour configurer la base de données locale (
sqlite
) :poetry run python manage.py migrate
- démarrer le serveur Django pour servir la web app en local :
poetry run python manage.py runserver
- accueil : http://localhost:8000/
- liste des bicyclettes enregistrées avec un lien vers leur page de détail
- bouton redirigeant vers la page / formulaire de création d'une bicyclette
- création de bicyclette : http://localhost:8000/bicyclettes/creer/
- détail d'une bicyclette : http://localhost:8000/bicyclettes/detail/str:identifiant_unique
- Keskecé Django ?
- Django ce n'est pas... / C'est...
- Petite histoire de Django : 19 ans, de 2005 à 2024
- L'éco-système web Python
- Popularité des frameworks Python - Stack Overflow Dev Survey 2023 & Stack Overflow Dev Survey 2024
- Répartition géographique des utilisateurs : JetBrains Django Developers Survey 2023
- Popularité chez les développeurs : Et sur GitHub ?
- Versions et support Django : Pourquoi je l'ai recommandé à mon client ?
- Les avantages de Django
- Et ses inconvénients
- Un peu de théorie
- Un bon vieux back-end - Requêtes et réponses HTTP
- Le paradigme MVC (MVT) - Model View Controller
- Le routage - Le liant du MVC/MTV
- Les gabarits, Langage de "templating" - Django Templating language
- L'API Queryset : manipuler les instances de modèles
- Les formulaires : Form : créer et modifier
- Un projet et des applications : Un code structuré
- Les commandes Django : Gérer votre projet et BDD
- Mise en pratique : Activité de location de vélos : gestion d’un parc
- Créer le modèle Bicyclette
- Ajouter des champs du modèle
- Générer et exécuter les migrations
- Vérifier l’état de la base de données sqlite
- Gérer le modèle avec l’admin
- Visualiser le parc sur une page du site
- Templating et héritage
- Ajouter une page de création
- Créer une page de détail (bonus)
- Liens vers le dépôt GitHub
- Et ensuite ?
- On n'a pas écrit de test 👋 mais bien sûr des choses existent : unittest ou pytest + pytest-django, requests factory...
- Et si on ne rafraîchissait pas tout l'écran à l'envoi du formulaire de création ? JSON Response et htmx
- Gérer une flotte de vélo : création en masse avec un formulaire non adossé à un modèle Django
- Plutôt qu'une simple liste, on pourrait afficher un tableau : django_tables2 app => illustrer encore une fois que des apps peuvent être intégrées
- Conclusion
- Beaucoup de choses à apprendre : courbe d’apprentissage un peu raide
- Django est adapté à des besoins poussés et vous facilite les choses
- Et le paramétrage du projet ? Le déploiement ?
- La communauté est grande, les contributions nombreuses, le support assuré à long terme.
- Les groups (groupes) et permissions (permissions)
- Les signals (signaux)
- Les middlewares (intergiciels)
- Exploiter l'admin Django
- Les commandes
django-admin
etmanage
:- Gestion des données (dump, load, flush)
- Gestion des fichiers statiques (collectstatic)
- La sécurité : CSRF
- API avec DRF (Django Rest Framework)
- Les templates : langage Django avec ses template tags + Jinja2
- Django Debug Toolbar (DjDT)
- Afficher des tableaux facilement avec django_tables2
- Wagtail
- Une stack complète sous Docker / Docker-compose avec PostgreSQL + Local AWS S3