Lorsque nous développons une application Django, l'un des premiers éléments que nous rencontrons est le modèle de base de données qui hérite de models.Model
. Bien que de nombreux tutoriels se contentent de suivre des instructions, approfondir la structure et les principes nous permet de tirer encore plus profit des avantages de Django ORM. Cet article se concentre sur la structure d'héritage des modèles Django et la façon de définir un modèle d'utilisateur personnalisé, afin d'explorer en détail comment le système de modèles de Django est construit.
models.Model : La classe de base de tous les modèles
Dans Django, toutes les classes de modèle héritent de models.Model
. Cette classe models.Model
joue le rôle de mappage avec les tables de la base de données. Chaque modèle devient une table de base de données, et les champs du modèle deviennent les colonnes de la table. Les méthodes fournies par cette classe de base permettent d'activer les fonctionnalités clés de Django ORM.
save()
: Enregistrer l'objet dans la base de donnéesdelete()
: Supprimer l'objetobjects.create()
: Créer et enregistrer un objetobjects.filter()
: Récupérer des objets satisfaisant des conditions
Rien qu'en héritant de models.Model
, nous pouvons utiliser librement les fonctionnalités ORM de Django. C'est un exemple révélateur de la puissance de conception de Django ORM.
AbstractUser et CustomUser : Modèle utilisateur extensible
Django fournit par défaut le modèle auth.User
, mais il est courant d'avoir besoin d'étendre et de personnaliser le modèle utilisateur selon les projets. AbstractUser
est le modèle utilisateur abstrait fourni par Django en tenant compte de cette extensibilité. Par exemple, lorsque nous souhaitons ajouter un champ d'email, de numéro de téléphone ou d'adresse, nous l'utilisons.
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone_number = models.CharField(max_length=15, blank=True)
address = models.CharField(max_length=255, blank=True)

En définissant CustomUser
de cette manière, nous pouvons ajouter des champs personnalisés tout en conservant les fonctionnalités d'AbstractUser
. Étant donné que AbstractUser
hérite également de models.Model
, nous avons accès aux méthodes de base de Django ORM.
models.Manager et AbstractUserManager : Logique des requêtes de base de données et création d'utilisateurs
Le models.Manager
, qui joue le rôle de gestionnaire de modèle, est une interface qui gère les requêtes vers la base de données, permettant d'utiliser des méthodes telles que filter()
, get()
, create()
via le gestionnaire par défaut objects
. Dans les cas où un gestionnaire spécialisé pour le modèle utilisateur, comme CustomUser, est nécessaire, Django fournit la classe de gestionnaire AbstractUserManager
. Cette classe permet de personnaliser la logique de création d'utilisateurs.
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Logique de création d'utilisateur
pass
def create_superuser(self, email, password=None, **extra_fields):
# Logique de création de superutilisateur
pass
En utilisant un gestionnaire de ce type, il est possible de s'adapter de manière flexible aux différentes situations pouvant survenir lors du processus de création d'un utilisateur. Étant donné qu'AbstractUserManager
est également hérité de models.Manager
, il inclut toutes les fonctionnalités de requêtes de base de données standard.
Comprendre la structure d'héritage des modèles Django
Comprendre la structure d'héritage des modèles dans Django permet de concevoir et de mettre en œuvre des modèles de manière plus efficace. En résumé, cela se présente comme suit :
models.Model
: Classe de base de tous les modèles Django, qui fournit des fonctionnalités ORM tout en étant mappée à la base de données.AbstractUser
: Classe abstraite héritant demodels.Model
. En l'héritant, nous pouvons définir facilement un modèle utilisateur personnaliséCustomUser
qui inclut les fonctionnalités demodels.Model
.AbstractUserManager
: Gestionnaire spécialisé pour la création d'utilisateurs qui hérite demodels.Manager
. Il permet de personnaliser facilement la logique de création d'utilisateurs.
En conclusion, la structure des modèles de Django est conçue pour être à la fois flexible et puissante. Même lors de l'extension du modèle utilisateur pour ajouter des champs personnalisés, comprendre et exploiter les fonctionnalités ORM et la structure fournies par AbstractUser
et models.Model
permet d'obtenir un design de base de données plus efficace et extensible. En utilisant bien cette structure des modèles, les développeurs peuvent construire des modèles de base de données complexes avec moins d'effort.
Add a New Comment