From e994fcc6281fb83c08b91aa7fdc9d6bc191e9096 Mon Sep 17 00:00:00 2001 From: Fred Pauchet Date: Mon, 12 Apr 2021 19:05:53 +0200 Subject: [PATCH] Working on the administration panel --- .../django-site-admin-after-connection.png | Bin 0 -> 52891 bytes source/images/django/django-site-admin.png | Bin 0 -> 30182 bytes source/part-1-workspace/django/_index.adoc | 22 ++-- source/part-3-django-concepts/admin.adoc | 121 +++++++++++++++--- 4 files changed, 115 insertions(+), 28 deletions(-) create mode 100644 source/images/django/django-site-admin-after-connection.png create mode 100644 source/images/django/django-site-admin.png diff --git a/source/images/django/django-site-admin-after-connection.png b/source/images/django/django-site-admin-after-connection.png new file mode 100644 index 0000000000000000000000000000000000000000..ab42ca15e4869b6f1805a798f13125a069e3abfe GIT binary patch literal 52891 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 X|A^X-DBl8R2BdmJ^LobB`%nJ^r{D0- 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�tJQEL$17^L=momFHLj8JD+SK%Tl~ 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 C requirements/base.txt +$ echo 'django==3.2' > requirements/base.txt $ echo '-r base.txt' > requirements/prod.txt $ echo '-r base.txt' > requirements/dev.txt ---- @@ -327,7 +327,7 @@ La structure de vos répertoires devient celle-ci: ==== Fonctionement général -Le métier de programmeur est devenu de plus en plus complexe. Il y a 20 ans, nous pouvions nous contenter d'une simple page PHP dans laquelle nous mixions l'ensemble des actios à réaliser: requêtes en bases de données, construction de la page, ... +Le métier de programmeur est devenu de plus en plus complexe. Il y a 20 ans, nous pouvions nous contenter d'une simple page PHP dans laquelle nous mixions l'ensemble des actios à réaliser: requêtes en bases de données, construction de la page, ... La recherche d'une solution a un problème n'était pas spécialement plus complexe - dans la mesure où le rendu des enregistrements en direct n'était finalement qu'une forme un chouia plus évoluée du `print()` ou des `System.out.println()` - mais c'était l'évolutivité des applications qui en prenait un coup: une grosse partie des tâches étaient dupliquées entre les différentes pages, et l'ajout d'une nouvelle fonctionnalité était relativement ardue. Django (et d'autres cadriciels) résolvent ce problème en se basant ouvertement sur le principe de `Don't repeat yourself` footnote:[DRY]. @@ -338,17 +338,17 @@ Le chemin parcouru par une requête est expliqué en (petits) détails ci-dessou .How it works image::images/diagrams/django-how-it-works.png[] -*1. Un utilisateur ou un visiteur souhaite accéder à une URL hébergée et servie par notre application*. +*1. Un utilisateur ou un visiteur souhaite accéder à une URL hébergée et servie par notre application*. Ici, nous prenons l'exemple de l'URL fictive `https://gwift/wishes/91827`. Lorsque cette URL "arrive" dans notre application, son point d'entrée se trouvera au niveau des fichiers `asgi.py` ou `wsgi.py`. Nous verrons cette partie plus tard, et nous pouvons nous concentrer sur le chemin interne qu'elle va parcourir. -*Etape 0* - La première étape consiste à vérifier que cette URL répond à un schéma que nous avons défini dans le fichier `gwift/urls.py`. +*Etape 0* - La première étape consiste à vérifier que cette URL répond à un schéma que nous avons défini dans le fichier `gwift/urls.py`. *Etape 1* - Si ce n'est pas le cas, l'application n'ira pas plus loin et retournera une erreur à l'utilisateur. -*Etape 2* - Django va parcourir l'ensemble des _patterns_ présents dans le fichier `urls.py` et s'arrêtera sur le premier qui correspondra à la requête qu'il a reçue. -Ce cas est relativement trivial: la requête `/wishes/91827` a une correspondance au niveau de la ligne `path("wishes/` dans l'exemple ci-dessous. +*Etape 2* - Django va parcourir l'ensemble des _patterns_ présents dans le fichier `urls.py` et s'arrêtera sur le premier qui correspondra à la requête qu'il a reçue. +Ce cas est relativement trivial: la requête `/wishes/91827` a une correspondance au niveau de la ligne `path("wishes/` dans l'exemple ci-dessous. Django va alors appeler la fonction footnote:[Qui ne sera pas toujours une fonction. Django s'attend à trouver un _callable_, c'est-à-dire n'importe quel élément qu'il peut appeler comme une fonction.] associée à ce _pattern_, c'est-à-dire `wish_details` du module `gwift.views`. [source,python] @@ -367,7 +367,7 @@ urlpatterns = [ <2> Champomy et cotillons! Nous avons une correspondance avec `wishes/details/91827` -TODO: En fait, il faudrait quand même s'occuper du modèle ici. +TODO: En fait, il faudrait quand même s'occuper du modèle ici. TODO: et de la mise en place de l'administration, parce que nous en aurons besoin pour les étapes de déploiement. [line-through]#Nous n'allons pas nous occuper de l'accès à la base de données pour le moment (nous nous en occuperons dans un prochain chapitre) et nous nous contenterons de remplir un canevas avec un ensemble de données.# @@ -485,7 +485,7 @@ plugins = === Structure finale de notre environnement -Nous avons donc la strucutre finale pour notre environnement de travail: +Nous avons donc la structure finale pour notre environnement de travail: [source,bash] ---- @@ -519,7 +519,7 @@ Nous avons donc la strucutre finale pour notre environnement de travail: === Cookie cutter -Pfiou! Ca en fait des commandes et du boulot pour "juste" démarrer un nouveau projet, non? Sachant qu'en plus, nous avons dû modifier des fichiers, déplacer des dossiers, ajouter des dépendances, configurer une base de données, ... +Pfiou! Ca en fait des commandes et du boulot pour "juste" démarrer un nouveau projet, non? Sachant qu'en plus, nous avons dû modifier des fichiers, déplacer des dossiers, ajouter des dépendances, configurer une base de données, ... Bonne nouvelle! Il existe des générateurs, permettant de démarrer rapidement un nouveau projet sans (trop) se prendre la tête. Le plus connu (et le plus personnalisable) est https://cookiecutter.readthedocs.io/[Cookie-Cutter], qui se base sur des canevas _type https://pypi.org/project/Jinja2/[Jinja2]_, pour créer une arborescence de dossiers et fichiers conformes à votre manière de travailler. Et si vous avez la flemme de créer votre propre canevas, vous pouvez utiliser https://cookiecutter-django.readthedocs.io[ceux qui existent déjà]. @@ -542,10 +542,10 @@ Pour démarrer, créez un environnement virtuel (comme d'habitude): [SUCCESS]: Project initialized, keep up the good work! ---- -Si vous explorez les différents fichiers, vous trouverez beaucoup de similitudes avec la configuration que nous vous proposions ci-dessus. +Si vous explorez les différents fichiers, vous trouverez beaucoup de similitudes avec la configuration que nous vous proposions ci-dessus. En fonction de votre expérience, vous serez tenté de modifier certains paramètres, pour faire correspondre ces sources avec votre utilisation ou vos habitudes. -NOTE: Il est aussi possible d'utiliser l'argument `--template`, suivie d'un argument reprenant le nom de votre projet (``), lors de l'initialisation d'un projet avec la commande `startproject` de `django-admin`, afin de calquer votre arborescence sur un projet existant. +NOTE: Il est aussi possible d'utiliser l'argument `--template`, suivie d'un argument reprenant le nom de votre projet (``), lors de l'initialisation d'un projet avec la commande `startproject` de `django-admin`, afin de calquer votre arborescence sur un projet existant. La https://docs.djangoproject.com/en/stable/ref/django-admin/#startproject[documentation] à ce sujet est assez complète. [source,bash] diff --git a/source/part-3-django-concepts/admin.adoc b/source/part-3-django-concepts/admin.adoc index 9c8872a..ccf33d3 100644 --- a/source/part-3-django-concepts/admin.adoc +++ b/source/part-3-django-concepts/admin.adoc @@ -1,26 +1,113 @@ == Administration -Woké. On va commencer par la *partie à ne _surtout_ (__surtout__ !!) pas faire en premier dans un projet Django*. Mais on va la faire quand même: la raison principale est que cette partie est tellement puissante et performante, qu'elle pourrait laisser penser qu'il est possible de réaliser une application complète rien qu'en configurant l'administration. Mais c'est faux. +Woké. On va commencer par la *partie à ne _surtout_ (__surtout__ !!) pas faire en premier dans un projet Django*. +Mais on va la faire quand même: la raison principale est que cette partie est tellement puissante et performante, qu'elle pourrait laisser penser qu'il est possible de réaliser une application complète rien qu'en configurant l'administration. +Mais c'est faux. -L'administration est une sorte de tour de contrôle évoluée; elle se base sur le modèle de données programmé et construit dynamiquement les formulaires qui lui est associé. Elle joue avec les clés primaires, étrangères, les champs et types de champs par https://fr.wikipedia.org/wiki/Introspection[introspection], et présente tout ce qu'il faut pour avoir du https://fr.wikipedia.org/wiki/CRUD[CRUD], c'est-à-dire tout ce qu'il faut pour ajouter, lister, modifier ou supprimer des informations. +L'administration est une sorte de tour de contrôle évoluée, un _back office_ sans transpirer; elle se base sur le modèle de données programmé et construit dynamiquement les formulaires qui lui est associé. +Elle joue avec les clés primaires, étrangères, les champs et types de champs par https://fr.wikipedia.org/wiki/Introspection[introspection], et présente tout ce qu'il faut pour avoir du https://fr.wikipedia.org/wiki/CRUD[CRUD], c'est-à-dire tout ce qu'il faut pour ajouter, lister, modifier ou supprimer des informations. -Son problème est qu'elle présente une courbe d'apprentissage asymptotique. Il est *très* facile d'arriver rapidement à un bon résultat, au travers d'un périmètre de configuration relativement restreint. Mais quoi que vous fassiez, il y a un moment où la courbe de paramétrage sera tellement ardue que vous aurez plus facile à développer ce que vous souhaitez ajouter en utilisant les autres concepts de Django. +Son problème est qu'elle présente une courbe d'apprentissage asymptotique. +Il est *très* facile d'arriver rapidement à un bon résultat, au travers d'un périmètre de configuration relativement restreint. +Mais quoi que vous fassiez, il y a un moment où la courbe de paramétrage sera tellement ardue que vous aurez plus facile à développer ce que vous souhaitez ajouter en utilisant les autres concepts de Django. -Elle doit rester dans les mains d'administrateurs ou de gestionnaires, et dans leurs mains à eux uniquement: il n'est pas question de donner des droits aux utilisateurs finaux (même si c'est extrêment tentant durant les premiers tours de roues). Indépendamment de la manière dont vous allez l'utiliser et la configurer, vous finirez par devoir développer une "vraie" application, destinée aux utilisateurs classiques, et répondant à leurs besoins uniquement. +Cette fonctionnalité doit rester dans les mains d'administrateurs ou de gestionnaires, et dans leurs mains à eux uniquement: il n'est pas question de donner des droits aux utilisateurs finaux (même si c'est extrêment tentant durant les premiers tours de roues). +Indépendamment de la manière dont vous allez l'utiliser et la configurer, vous finirez par devoir développer une "vraie" application, destinée aux utilisateurs classiques, et répondant à leurs besoins uniquement. -Une bonne idée consiste à développer l'administration dans un premier temps, en *gardant en tête qu'il sera nécessaire de développer des concepts spécifiques*. Dans cet objectif, l'administration est un outil exceptionel, qui permet de valider un modèle, de créer des objets rapidement et de valider les liens qui existent entre eux. +Une bonne idée consiste à développer l'administration dans un premier temps, en *gardant en tête qu'il sera nécessaire de développer des concepts spécifiques*. +Dans cet objectif, l'administration est un outil exceptionel, qui permet de valider un modèle, de créer des objets rapidement et de valider les liens qui existent entre eux. -C'est un excellent outil de prototypage et de preuve de concept. +C'est aussi un excellent outil de prototypage et de preuve de concept. -Elle se base sur plusieurs couches que l'on a déjà (ou on va bientôt) aborder (suivant le sens de lecture que vous préférez): +Elle se base sur plusieurs couches que l'on a déjà (ou on va bientôt) aborder (suivant le sens de lecture que vous préférez): -. Le modèle et les validateurs +. Le modèle de données +. Les validateurs . Les formulaires . Les widgets -=== Quelques conseils +=== Le modèle de données -. Surchargez la méthode `__str__(self)` pour chaque classe que vous aurez définie dans le modèle. Cela permettra de construire une représentation textuelle pour chaque instance de votre classe. Cette information sera utilisée un peu partout dans le code, et donnera une meilleure idée de ce que l'on manipule. En plus, cette méthode est également appelée lorsque l'administration historisera une action (et comme cette étape sera inaltérable, autant qu'elle soit fixée dans le début). +Comme expliqué ci-dessus, le modèle de données est constité d'un ensemble de champs typés et de relations. +L'administration permet de décrire les données qui peuvent être modifiées, en y associant un ensemble (basique) de permissions. + +Si vous vous rappelez de l'application que nous avions créée dans la première partie, les URLs reprenaient déjà la partie suivante: + +[source,python] +---- +from django.contrib import admin +from django.urls import path + +from gwift.views import wish_details + +urlpatterns = [ + path('admin/', admin.site.urls), <1> + [...] +] +---- +<1> Cette URL signifie que la partie `admin` est déjà active et accessible à l'URL `/admin` + +C'est le seul prérequis pour cette partie. + +Chaque application nouvellement créée contient par défaut un fichier `admin.py`, dans lequel il est possible de déclarer quel ensemble de données sera accessible/éditable. +Ainsi, si nous partons du modèle basique que nous avions détaillé plus tôt, avec des souhaits et des listes de souhaits: + +[source,python] +---- +# gwift/wish/models.py + +from django.db import models + + +class WishList(models.Model): + name = models.CharField(max_length=255) + + +class Item(models.Model): + name = models.CharField(max_length=255) + wishlist = models.ForeignKey(WishList, on_delete=models.CASCADE) + +---- + +Nous pouvons facilement arriver au résultat suivant, en ajoutant quelques lignes de configuration dans ce fichier `admin.py`: + +[source,python] +---- +from django.contrib import admin + +from .models import Item, WishList <1> + + +admin.site.register(Item) <2> +admin.site.register(WishList) + +---- +<1> Nous importons les modèles que nous souhaitons gérer dans l'admin +<2> Et nous les déclarons comme gérables. Cette dernière ligne implique aussi qu'un modèle pourrait ne pas être disponible du tout, ce qui n'activera simplement aucune opération de lecture ou modification. + +Il nous reste une seule étape à réaliser: créer un nouvel utilisateur. +Pour cet exemple, notre gestion va se limiter à une gestion manuelle; nous aurons donc besoin d'un _super-utilisateur_, que nous pouvons créer grâce à la commande `python manage.py createsuperuser`. + +[source,bash] +---- +λ python manage.py createsuperuser +Username (leave blank to use 'fred'): fred +Email address: fred@root.org +Password: ****** +Password (again): ****** +Superuser created successfully. +---- + +.Connexion au site d'administration +image::images/django/django-site-admin.png[align=center] + +.Administration +image::images/django/django-site-admin-after-connection.png[align=center] + + +=== Quelques conseils de base + +. Surchargez la méthode `__str__(self)` pour chaque classe que vous aurez définie dans le modèle. Cela permettra de construire une représentation textuelle pour chaque instance de votre classe. Cette information sera utilisée un peu partout dans le code, et donnera une meilleure idée de ce que l'on manipule. En plus, cette méthode est également appelée lorsque l'administration historisera une action (et comme cette étape sera inaltérable, autant qu'elle soit fixée dans le début). . La méthode `get_absolute_url(self)` retourne l'URL à laquelle on peut accéder pour obtenir les détails d'une instance. Par exemple: @@ -52,17 +139,17 @@ https://hackernoon.com/all-you-need-to-know-about-prefetching-in-django-f9068ebe https://medium.com/@hakibenita/things-you-must-know-about-django-admin-as-your-app-gets-bigger-6be0b0ee9614 En gros, le problème de l'admin est que si on fait des requêtes imbriquées, on va flinguer l'application et le chargement de la page. -La solution consiste à utiliser la propriété `list_select_related` de la classe d'Admin, afin d'appliquer une jointure par défaut et +La solution consiste à utiliser la propriété `list_select_related` de la classe d'Admin, afin d'appliquer une jointure par défaut et et gagner en performances. === admin.ModelAdmin -La classe `admin.ModelAdmin` que l'on retrouvera principalement dans le fichier `admin.py` de chaque application contiendra la définition de ce que l'on souhaite faire avec nos données dans l'administration. Cette classe (et sa partie Meta) +La classe `admin.ModelAdmin` que l'on retrouvera principalement dans le fichier `admin.py` de chaque application contiendra la définition de ce que l'on souhaite faire avec nos données dans l'administration. Cette classe (et sa partie Meta) -=== L'affichage +=== L'affichage -Comme l'interface d'administration fonctionne (en trèèèès) gros comme un CRUD auto-généré, on trouve par défaut la possibilité de : +Comme l'interface d'administration fonctionne (en trèèèès) gros comme un CRUD auto-généré, on trouve par défaut la possibilité de : . Créer de nouveaux éléments . Lister les éléments existants @@ -71,7 +158,7 @@ Comme l'interface d'administration fonctionne (en trèèèès) gros comme un CRU Les affichages sont donc de deux types: en liste et par élément. -Pour les affichages en liste, le plus simple consiste à jouer sur la propriété `list_display`. +Pour les affichages en liste, le plus simple consiste à jouer sur la propriété `list_display`. Par défaut, la première colonne va accueillir le lien vers le formulaire d'édition. On peut donc modifier ceci, voire créer de nouveaux liens vers d'autres éléments en construisant des URLs dynamiquement. @@ -137,7 +224,7 @@ class Wishlist(admin.ModelAdmin): ---- -Et voilà : l'administration d'une liste de souhaits (_Wishlist_) pourra directement gérer des relations multiples vers des souhaits. +Et voilà : l'administration d'une liste de souhaits (_Wishlist_) pourra directement gérer des relations multiples vers des souhaits. ==== Les auto-suggestions et auto-complétions @@ -152,7 +239,7 @@ Parler ici des `fieldsets` et montrer comment on peut regrouper des champs dans === Les actions sur des sélections -Les actions permettent de partir d'une liste d'éléments, et autorisent un utilisateur à appliquer une action sur une sélection d'éléments. Par défaut, il existe déjà une action de *suppression*. +Les actions permettent de partir d'une liste d'éléments, et autorisent un utilisateur à appliquer une action sur une sélection d'éléments. Par défaut, il existe déjà une action de *suppression*. Les paramètres d'entrée sont :