Bij het ontwikkelen van een Django-toepassing is een van de eerste dingen waarmee we in aanraking komen de basisdatabase-modellen die de models.Model
klasse erven. Hoewel we in veel tutorials simpelweg volgen wat er wordt geleerd, kunnen we de voordelen van de Django ORM effectiever benutten door dieper in de structuur en principes te duiken. In dit artikel zullen we de erfstructuur van Django-modellen en de manier waarop we een aangepaste gebruikersmodel kunnen definiëren, nader bekijken, en zo in detail onderzoeken hoe het modelsysteem van Django is opgebouwd.
models.Model: De Basisklasse voor Alle Modellen
In Django erft elke modelklasse van models.Model
. Deze models.Model
klasse maakt de mapping naar database tabellen mogelijk. Elk model wordt een database tabel en de velden van het model worden de kolommen van de tabel. De methoden die deze basisklasse biedt, zijn de elementen die de kernfunctionaliteit van de Django ORM mogelijk maken.
save()
: Slaat het object op in de databasedelete()
: Verwijdert het objectobjects.create()
: Creëert en slaat het object opobjects.filter()
: Haalt objecten op die aan bepaalde voorwaarden voldoen
Door simpelweg te erven van models.Model
kunnen we de functionaliteiten van Django's ORM volledig benutten. Dit is een voorbeeld van hoe krachtig de Django ORM is ontworpen.
AbstractUser en CustomUser: Uitbreidbare Gebruikersmodellen
Django biedt standaard het auth.User
model aan, maar het is gebruikelijk om gebruikersmodellen per project uit te breiden en aan te passen. AbstractUser
is het abstracte gebruikersmodel dat door Django wordt geleverd met het oog op deze uitbreidbaarheid. Dit wordt bijvoorbeeld gebruikt wanneer we een e-mailveld willen toevoegen of velden zoals telefoonnummer of adres willen toevoegen.
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)

Als we CustomUser
op deze manier definiëren, kunnen we aangepaste velden toevoegen terwijl we de functionaliteit van AbstractUser
behouden. Aangezien AbstractUser
ook erft van models.Model
, kunnen we de basismethoden van de Django ORM gebruiken.
models.Manager en AbstractUserManager: Databasequery's en Gebruikerscreatielogica
De models.Manager
, die de rol van manager voor het model vervult, functioneert als een interface die databasequery's verwerkt. Dit wordt mogelijk gemaakt door de standaardmanager objects
, waar we methoden zoals filter()
, get()
, create()
mee kunnen gebruiken. Wanneer een manager die specifiek is voor gebruikersmodellen vereist is, biedt Django de AbstractUserManager
managerklasse aan. Hiermee kunnen we de logica met betrekking tot het aanmaken van gebruikers aanpassen.
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Logica voor het aanmaken van gebruikers
pass
def create_superuser(self, email, password=None, **extra_fields):
# Logica voor het aanmaken van supergebruikers
pass
Door een dergelijke manager te gebruiken, kunnen we flexibel inspelen op diverse situaties die zich kunnen voordoen bij het aanmaken van gebruikers. Aangezien AbstractUserManager
is uitgebreid van models.Manager
, bevat het alle basisfunctionaliteiten voor databasequery's.
Begrip van de Django Modelerfstructuur
Door de modelerfstructuur van Django te begrijpen, kunnen we de modelontwerp en implementatie efficiënter uitvoeren. Dit kan eenvoudig worden samengevat als volgt:
models.Model
: De basis klasse voor alle Django modellen en biedt ORM functionaliteiten door de mapping naar de database.AbstractUser
: Een abstracte klasse die vanmodels.Model
erft. Door hiervan te erven enCustomUser
te creëren, kunnen we eenvoudig een aangepast gebruikersmodel definiëren dat de functionaliteiten vanmodels.Model
omvat.AbstractUserManager
: Een manager die vanmodels.Manager
erft en gespecialiseerd is in het aanmaken van gebruikers. Hiermee kunnen we de gebruikerscreatielogica eenvoudig aanpassen.
Samenvattend is de modelstructuur van Django zeer flexibel en krachtig ontworpen. Zelfs bij het uitbreiden van het gebruikersmodel om aangepaste velden toe te voegen, kunnen we de ORM-functies en structuur die worden geboden door AbstractUser
en models.Model
begrijpen en benutten voor een efficiënter en uitbreidbaar databaseontwerp. Door deze modelstructuur van Django goed te benutten, kunnen ontwikkelaars complexe datamodellen opbouwen met minder inspanning.
댓글이 없습니다.