Wagtail avec un modèle d'utilisateur personnalisé

La combinaison de Wagtail avec un modèle utilisateur personnalisé nécessite la configuration des deux avant la migration de la base de données. Comme il s'agit du premier tutoriel de la série sur PythonEatsTail, on partira de zéro.

27 Juin 2020 17:43
Thèmes: Modèle d'utilisateur personnalisé

Dans ce tutoriel, on fera ce qui suit:

  • Créer un environnement virtuel
  • Installer Django et Wagtail dedans
  • Configurer une base de données avec PostgreSQL
  • Créer un modèle utilisateur personnalisé

L'utilisation d'un modèle utilisateur personnalisé et de Wagtail combinés nécessite de configurer le modèle utilisateur avant d'effectuer la première migration de la base de données, c'est donc ce qu'on va faire.

Je suppose que python3 est installé sur votre ordinateur (sinon, téléchargez-le sur python.org ou sur Homebrew pour Mac. J'utiliserai la commande python3 régulièrement, pour éviter toute confusion avec Python préinstallé sur Mac. Créez un répertoire pour le projet et changez dans ce répertoire:

mkdir pet
cd pet

On utilise la commande standard venv pour créer un environnement virtuel et y entre:

python3 -m venv env
source env/bin/activate

Pour installer Django dans cet environnement, on utilise pip3:

pip3 install django

Comme on est invité à mettre à jour la dernière version de pip dans cet environnement, on prend soin de cela:

install pip3 --upgrade pip

Maintenant, installez Wagtail et commencez un nouveau projet Wagtail dans ce répertoire:

pip3 install wagtail
wagtail start pet .

pet est le nom du projet et le . (point) indique à Wagtail de l'installer dans le répertoire courant (sinon un nouveau répertoire serait créé). Découvrez la disposition du projet: Wagtail a préinstallé de nombreux fichiers, tels que requirements.txt, plusieurs fichiers de paramètres, un répertoire personnel. Ne vous en faites pas maintenant.

On veut utiliser PostgreSQL pour notre base de données. Téléchargez-le et installez-le sur votre ordinateur à partir de postgresql.org ou pour Mac via Homebrew. Actuellement, la dernière version est 12. Pour créer la base de données, on utilisera la commande psql. Assurez-vous que le répertoire contenant cette commande se trouve sur votre chemin. L'utilisation de la commande psql peut échouer, car psql tentera alors de se connecter à une base de données portant le même nom que le nom d'utilisateur de votre ordinateur. Puisque la base de données postgres est là par défaut, on peut taper:

psql postgres

et à l'invite:

CREATE USER usr_pet WITH PASSWORD '123';
CREATE DATABASE db_pet OWNER usr_pet;

Évidemment, vous devriez choisir un meilleur mot de passe que 123. Ici, on a créé un propriétaire dédié usr_pet de notre base de données db_pet. Cela a également un sens lorsque vous déployez ultérieurement votre projet; vous ne voulez pas exécuter toutes les commandes en tant qu'utilisateur root. Pour quitter psql, tapez \q.

PostgreSQL a besoin d'un pilote Python et le plus largement utilisé est psycopg2. On va installer la version binaire psycopg2-binary dans notre environnement, car cela pose moins de problèmes avec des fichiers de configuration potentiellement manquants:

pip3 install psycopg2-binary

On garde une trace de nos packages installés dans requirements.txt. Lorsqu'on l'ouvre, on voit que Django et Wagtail sont déjà là. Ajoutez-y psycopg2-binary. Les paramètres de base de notre projet se trouvent dans le fichier settings/base.py. Remplacez le paramètre existant pour DATABASES par ce qui suit:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'db_pet',
        'USER': 'usr_pet',
        'PASSWORD': '123',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    }
}

Il est maintenant temps de créer notre modèle utilisateur personnalisé. On sous-classera notre modèle de Django's AbstractUser. Dans la documentation: "AbstractUser provides the full implementation of the default User as an abstract model". Avec le package allauth, cela nous permet d'utiliser toutes les fonctionnalités standard de Django, telles que la création et la modification d'utilisateurs, l'ajout de champs supplémentaires, la connexion par e-mail, les autorisations utilisateur, la fonctionnalité d'admin. Pour les projets plus spécialisés, il est recommandé de sous-classer à partir de AbstractBaseUser, ce qui nécessiterait l'écriture des méthodes create user / create superuser, des formulaires pour créer et modifier des utilisateurs dans admin, définir les autorisations. Cela sort du cadre de ce didacticiel; il y a un exemple dans la documentation.

Vous pouvez placer le modèle dans n'importe quel fichier models.py, mais comme on veut conserver tout ce qui concerne notre modèle utilisateur en un seul endroit, on crée une application distincte pour cela:

python3 manage.py startapp userauth

Ajoutez userauth à la liste des INSTALLED_APPS dans settings/base.py. Dans le fichier models.py de userauth mettez le modèle suivant (pour l'instant vide):

from django.contrib.auth.models import AbstractUser

class CustomUser (AbstractUser):
    pass

On demande à Django de l'utiliser comme modèle utilisateur en ajoutant ce qui suit à nos settings/base.py:

AUTH_USER_MODEL = 'userauth.CustomUser'

Notre modèle utilisateur héritera de tous les champs standard (nom d'utilisateur, mot de passe, etc.) du modèle utilisateur de Django et on peut ajouter autant de champs que l'on souhaite plus tard dans notre projet. Maintenant (enfin) on peut migrer notre base de données:

python3 manage.py makemigrations
python3 manage.py migrate

On peut vérifier que tout fonctionne avec:

python3 manage.py runserver

et en visitant la page http://127.0.0.1:8000 dans notre navigateur. Voilà la page d'accueil de Wagtail!

C'est tout pour le moment. Continuez si vous souhaitez ajouter des champs supplémentaires au modèle utilisateur personnalisé et les ajouter à l'admin Django et Wagtail, tels que la date de naissance, l'adresse complète, le numéro de téléphone ou si vous souhaitez ajouter des informations de connexion, d'inscription et de nombreuses autres fonctionnalités d'authentification à votre projet.

Commentez cet article (connectez-vous d'abord ou confirmez par nom et email ci-dessous)