Qu'est-ce que le framework django ?

Découvrez les avantages et le fonctionnement de Django, le framework qui fait référence au sein de la communauté Python.

Publié le par Gabriel Trouvé (mis à jour le )
paceTemps de lecture estimé : 25 minutes

Ne pas réinventer la roue, c'est une expression que vous avez sans doute déjà entendue et c'est aussi l'une des préoccupations majeures de nombreux développeurs.

Nous faisons preuve d'une créativité incroyable, tant à l'échelle individuelle que collective, pour développer un arsenal toujours plus étoffé et ingénieux de concepts et de ressources pour finalement tendre vers cet objectif.

Dans cet article, nous aborderons la notion de framework, que l'on pourrait traduire littérallement par "cadre de travail". Une ressource très appréciée et pour cause !

Plus précisément, nous nous intéresserons à celui qui fait référence au sein de la communauté Docstring mais aussi dans la communauté Python, j'ai nommé Django.

Qu'est-ce qu'un framework ?

Avant toute chose, commençons par définir les termes. Mais concrètement qu'est-ce qu'un framework ? 🧐

On peut principalement se le représenter à la manière d'une boîte à outils qui permet de structurer le développement d'une tâche ou plus largement de contribuer au développement d'un projet.

D'une autre manière les frameworks de développement permettent d'implémenter du code pour couvrir les besoins primaires de nombreuses applications. Cela grâce à l'ensemble des outils mis à disposition, des briques 🧱, à personnaliser ou à utiliser en l'état. Il vous laisse alors de quoi vous concentrer sur la véritable valeur ajoutée à apporter 💪

Pourquoi utiliser le framework Django ?

Django est un framework Python de haut niveau, gratuit et open-source.

Une de ces principales forces : il propose d'emblée un grand nombre de fonctionnalités prêtes à l'emploi !

Sa devise : le framework web pour les perfectionnistes avec des deadlines.

Par exemple, dans le cadre de vos projets en développement Web, Django s'occupera de l'authentification de vos utilisateurs, de l'administration de votre contenu, de l'architecture de vos sites ou de vos flux RSS.

Son ORM (Object-Relational Mapping), sera aussi un allié de taille pour gérer facilement vos relations avec les bases de données.

Comme évoqué en introduction, l'objectif de Django est de permettre aux développeurs de se concentrer sur les fonctionnalités qui rendent une application unique. Cela sans perdre de temps avec l'ensemble des éléments "standards" qui seront à remettre en place pour chaque projet.

Django est le framework qu'on utilise pour gérer le back-end de Docstring 😉

La force d'un framework ou d'un langage, c'est aussi et surtout sa communauté. Celle de Django est très développée et ne cesse de grandir chaque jour. Beaucoup de développeurs considèrent d'ailleurs Django comme LE framework incontournable à apprendre avec Python !

Pour vous rendre compte de l'effervescence de sa communauté, rien de mieux que d'aller prendre la température sur Twitter, sur GitHub ou encore en s'abonnant à l'une des mailing lists proposée sur le site officiel.

De plus, si vous avez besoin que votre application puisse évoluer en même temps que le nombre de vos utilisateurs, Django est le framework sur lequel vous pouvez vous reposer.

Pour preuve, certains des sites les plus fréquentés de la planète mettent à profit sa capacité à évoluer rapidement et avec souplesse pour répondre aux demandes les plus exigeantes !

Dans les exemples mis en avant par la Django Software Foundation elle-même, on y compte de très belles références comme Disqus, Instagram, MacArthur Foundation, Mozilla, National Geographic, Open Knowledge Foundation, Pinterest ou encore Open Stack, rien que ça 😎

Créer un projet Django en 5 minutes

Bien sûr, avant d'attaquer cette partie, il convient de connaître les bases du langage Python avant de se lancer dans le développement web avec Django.

Créer un projet

Une fois votre environnement virtuel créé et activé il faut installer la bibliothèque Django.

Pour ce faire, il suffit d'utiliser pip :

pip install django

Une fois le framework installé, il est nécessaire de créer un projet, qui va contenir toutes les données de notre application.

Pour créer un projet, on utilise la commande django-admin qui permet de créer ou modifier un projet.

Dans notre cas, on souhaite créer un projet, on utilise donc la sous-commande startproject et on indique le nom du projet :

django-admin startproject nom_du_project

Cette commande va créer une arborescence de de ce type (ici j'ai nommé le projet Docexemple) :

Le fichier manage.py va être le cœur de votre projet.

C'est grâce à lui que vous allez pouvoir créer votre premier super utilisateur avec les droits d'administration. C'est aussi lui qui va vous permettre de lancer un serveur de test. Et c'est aussi lui qui va vous permettre de créer les différentes applications autour de votre projet.

Le but étant de présenter Django, je vais rester simple et concis. Je ne vais donc pas vous présenter la notion d'applications. Nous allons tout faire depuis le dossier de notre projet.

Afficher notre première page

Jusqu'à présent, nous n'avons fait que très peu de choses. Mais... il est déjà possible de lancer un serveur test et de visualiser la première page de notre projet !

Pour ça, vous pouvez utiliser la commande runserver que vous donnez à ceux fameux fichier manage.py :

python manage.py runserver

Et voilà, il ne reste plus qu'à utiliser votre navigateur :

Alors oui, nous n'avons rien de personnel. Mais ce n'est pas grave, on va y remédier en quelques lignes de code.

Pour ça, il suffit de créer un fichier views.py dans le dossier du projet. C'est le fichier qui va contenir les vues de notre application. C'est le V de MVT (Modèle, Vue, Template).

Dans le views.py j'ai ajouté une fonction index qui va retourner 'Hello World', et que je vais importer dans le fichier urls.py.

# views.py
from django.http import HttpResponse
from django.views.generic import ListView
from blog.models import Articles


def index(request):
    return HttpResponse("Hello World")
# urls.py
from django.contrib import admin
from django.urls import path
from .views import index

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index),
]

Et voilà, nous avons notre super page d'index.

Au lieu d'afficher un simple "Hello "World" on voudrait plutôt afficher un fichier HTML. Mais ce n'est pas plus compliqué que ça. On définit une vue que l'on va affecter à une url.

Et la relation avec la base de données alors ?

Pour la suite j'ai dû créer une "application", mais il est inutile de rentrer dans le détail ici. Je préfère vous montrer la relation entre Django et la base de données.

Imaginons que nous souhaitions enregistrer des articles de blog dans notre base de données.

Dans un fichier models.py j'ai créé une classe avec deux attributs.

La classe va correspondre à une table de la base de données et les attributs aux champs.

# models.py
from django.db import models


class Articles(models.Model):
    title = models.CharField(max_length=100)
    body = models.TextField()

Dans la capture suivante vous pouvez voir que sur le logiciel de visualitation de base de données, on a une table Articles avec les deux champs title et body.

J'ai envie de récupérer tous les articles afin de les afficher dans un fichier HTML. Il suffit de créer une vue (ici la classe ArticlesList) et de la renseigner dans le fichier urls.py.

Dans notre classe on a renseigné le modèle Articles et le template html qui va être utilisé.

# views.py
from django.http import HttpResponse
from django.views.generic import ListView
from blog.models import Articles


def index(request):
    return HttpResponse("Hello World")


class ArticlesList(ListView):
    model = Articles
    template_name = "articles/index.html"

Dans le template HTML c'est le langage de gabarit de Django qui va être utilisé. Voici comment on afficherait les articles dans notre cas :

<!--  Fichier index.html -->
{% for article in articles %}
    {{ article.title }}
    {{ article.body }}
{% endfor %}

Comment on a réussi à faire tout ça ?

Grâce à la programmation orientée objet et les vues fondées sur les classes.

Avec Django vous allez pouvoir hériter de multiples classes livrées avec le framework.

Grâce à ce système, vous pouvez hériter de classes prédéfinies pour afficher le détail d'un article, créer un formulaire d'inscription pour les utilisateurs, un système de récupération de mot de passe... etc.

Autant de classes qui sont réutilisables grâce au concept de vues fondées sur les classes (Class Based View) et qui font tout le travail pour vous !

Les avantages de Django

Django est fourni avec une batterie de fonctionnalités. L'administration, le système d'authentification des utilisateurs, les formulaires... etc. Avec Django la puissance de la programmation orientée objet prend tout son sens. En effet, il est possible d'hériter de multiples classes dans le but d'avoir une application web adaptée à différents besoins.

La sécurité

La sécurité est toujours de mise avec Django, notamment avec une protection contre les attaques de scripts intersites, une protection CSRF, et protection contre les injections SQL (liste non exhaustive !).

La documentation est extrêmement bien fournie et traduite en français. Les différents concepts sont expliqués et illustrés par des exemples.

La force de la communauté

En effet, il est assez simple de trouver une réponse à ses questions. De plus il existe une multitude de paquets disponibles avec PyPi créés pour Django. Vous cherchez un paquet pour permettre pour créer un système d'activation de compte par email ? Pas de soucis, regardez du côté de Django Verify Email.

Vous comptez créer votre propre système d'APIs ? Il existe un framework complet à intégrer dans vos applications Django : Django Rest Framework.

L'interface d'administration

Django est fourni avec un système complet d'interface d'administration similaire à ce que vous pourriez retrouver pour administrer un site Wordpress.

Sur Docstring, on utilise encore cette interface pour gérer 95% du site. Le 5% restant correspond à des cas très précis pour lesquels nous avons développé nos propres interfaces, mais pour tout le reste, l'interface d'administration fournie avec le framework nous a toujours suffi depuis les débuts !

Les limites de Django ? Django peut donc s'adapter à toutes vos envies de projets et sera un soutien solide pour les faire évoluer dans le temps. Pour autant, Django n'est pas LA solution consacrée pour répondre à tous les besoins de développement.

Certains vont lui reprocher d'être trop lourd pour les petits projets et qu'il peut être plus complexe à prendre en main qu'un framework plus léger.

Bottle, CherryPy, FastAPI, Flask (le micro framework), Pyramid, Tornado et bien d'autres. Dans l'écosystème Python il existe de nombreux frameworks. Une rapide recherche sur Google devrait vous permettre de vous rendre compte des possibilités qui s'offrent à vous.

Mais alors comment faire son choix ? A ce stade, j'aurais 2 axes de réflexion à vous soumettre.

👉 Des considérations intrinsèques à votre projet: bien envisager vos besoins, tant en termes de fonctionnalités, que d'architecture, de temps disponible etc. et appréhender dès le début vos perspectives de développements à moyen-long terme.

👉 D'autres considérations, elles, extrinsèques: la force de la communauté, la capacité des auteurs (contributeurs ?) à patcher et faire évoluer la solution, mais aussi les accès à une documentation de qualité, autant gratuite que payante.

Ces points seront clés et les réponses devraient vous être d'une grande aide dans le choix du meilleur des candidats.

Conclusion

Vous l'aurez compris, Django est un formidable outil pour structurer et mener à bien une grande variété de projets tous azimuts.

Si cet article vous a donné envie d'en savoir davantage sur Django, je ne peux que vous encourager à jeter un oeil à l'excellent tutoriel officiel, et en français s'il vous plaît 🇫🇷, ou ce contenu gratuit proposé par Thibault Créer un site e-commerce avec Django.

💡 Une chouette opportunité de découvrir ou redécouvrir les bases de la réalisation d'un projet e-commerce avec Django, de la création du projet, à la création des modèles en passant par la création du panier, des vues de connexion et d'un utilisateur.

Et si vous ressentez le besoin de consolider vos bases en Python avant de plonger dans l'univers de Django, les 2 premières heures de la formation complète Python 2022 sont toujours disponibles gratuitement.