Rôle de models.Model
Tout d'abord, la classe de modèle la plus basique dans Django est models.Model
. Tous les modèles Django sont définis en héritant de models.Model
. Cette classe a pour rôle de mapper le modèle que j'ai défini à une table de base de données. Chaque classe de modèle représente une table dans la base de données, et les champs à l'intérieur deviennent les colonnes de la table.
Il est important de noter que l'héritage de models.Model
offre plusieurs méthodes utiles que l'on peut utiliser par défaut :
save()
: méthode pour enregistrer un objet dans la base de donnéesdelete()
: méthode pour supprimer un objetobjects.create()
: méthode pour créer et enregistrer un nouvel objetobjects.filter()
: méthode pour récupérer des objets satisfaisant certaines conditions
Grâce à ces fonctionnalités, on peut facilement profiter de la puissance de l'ORM Django simplement en héritant de models.Model
.
Relation entre AbstractUser et CustomUser
Django dispose d'un modèle utilisateur intégré appelé auth.User
. Bien qu'il soit possible de l'utiliser par défaut, il est souvent souhaitable de personnaliser le modèle utilisateur. Par exemple, il peut être nécessaire d'ajouter des champs supplémentaires comme le numéro de téléphone ou l'adresse.
Pour ce faire, on utilise AbstractUser
. Cette classe est un classe abstraite conçue pour permettre l'extension du modèle utilisateur de base fourni par Django (c'est-à-dire auth.User
). Étant donné que AbstractUser
hérite également de models.Model
, lorsque je définis CustomUser
en héritant de AbstractUser
, je peux utiliser toutes les fonctionnalités de l'ORM.
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)
Le modèle CustomUser
ainsi défini fournit toutes les fonctionnalités liées à l'authentification des utilisateurs tout en permettant de définir librement des champs supplémentaires.
Rôle de models.Manager et AbstractUserManager
Dans les modèles Django, models.Manager
agit comme une interface pour traiter les requêtes sur la base de données. Grâce au gestionnaire par défaut objects
, il est possible de récupérer ou de manipuler les données facilement. Par exemple, il existe des méthodes comme filter()
, get()
, create()
.
Lorsqu'un modèle utilisateur nécessite une logique de création d'utilisateurs, on peut utiliser AbstractUserManager
. Ce dernier hérite de models.Manager
et offre des méthodes spécialisées pour la création d'utilisateurs (create_user()
, create_superuser()
).
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 personnalisant la logique de création d'utilisateurs avec CustomUserManager
, il est possible de gérer le modèle utilisateur de manière plus flexible.
Résumé : Relations entre les classes de modèles
Pour résumer les relations entre les classes de modèles dans Django, voici ce que nous avons :
models.Model
: classe de base pour tous les modèles Django. Hérite d'elle pour mapper à la base de données et fournir des fonctionnalités ORM.AbstractUser
: classe abstraite héritant demodels.Model
. Élargie pour définirCustomUser
.AbstractUserManager
: hérite demodels.Manager
pour personnaliser la logique de création d'utilisateurs.
Comprendre et utiliser cette structure permet de concevoir le système de modèles de Django de manière plus efficace.
Add a New Comment