Bei der Entwicklung von Django-Anwendungen ist eines der ersten Dinge, mit denen wir konfrontiert werden, das grundlegende Datenbankmodell, das von models.Model erbt. In vielen Tutorials wird es nur nachgeahmt, aber wenn man die Struktur und die Prinzipien etwas tiefer betrachtet, kann man die Vorteile von Django ORM effektiver nutzen. In diesem Artikel werden wir uns eingehender mit der Vererbungsstruktur der Django-Modelle und der Definition benutzerdefinierter Benutzermodelle beschäftigen und die Zusammenstellung des Modellsystems von Django näher untersuchen.
models.Model: Die Basis aller Modelle
In Django erben alle Modellklassen von models.Model. Diese models.Model-Klasse spielt eine zentrale Rolle bei der Abbildung auf Datenbanktabellen. Jedes Modell wird zur Datenbanktabelle, und die Felder des Modells entsprechen den Spalten der Tabelle. Die Methoden, die diese Basisklasse bietet, ermöglichen die Kernfunktionen von Django ORM.
save(): Speichert das Objekt in der Datenbankdelete(): Löscht das Objektobjects.create(): Erstellt und speichert ein Objektobjects.filter(): Abfrage von Objekten, die bestimmte Bedingungen erfüllen
Allein durch die Ableitung von models.Model kann man die Funktionen von Django ORM ohne Einschränkungen nutzen. Dies ist ein Beispiel dafür, wie mächtig Django ORM gestaltet ist.
AbstractUser und CustomUser: Erweiterbare Benutzermodelle
Django bietet standardmäßig das auth.User-Modell an, aber die Anforderungen zur Erweiterung und Anpassung von Benutzermodellen variieren von Projekt zu Projekt. AbstractUser ist das abstrakte Benutzermodell von Django, das unter Berücksichtigung dieser Erweiterbarkeit bereitgestellt wird. Beispielsweise wird es verwendet, wenn man ein E-Mail-Feld oder Felder wie Telefonnummer oder Adresse hinzufügen möchte.
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)
Durch die Definition von CustomUser auf diese Weise kann man die Funktionen von AbstractUser übernehmen und benutzerdefinierte Felder hinzufügen. Da AbstractUser ebenfalls von models.Model erbt, kann man die grundlegenden Methoden von Django ORM weiterhin verwenden.
models.Manager und AbstractUserManager: Abfragen der Datenbank und Logik zur Benutzererstellung
Der models.Manager, welcher die Rolle des Managers eines Modells übernimmt, ist eine Schnittstelle zur Verarbeitung von Abfragen an die Datenbank, die es ermöglicht, Methoden wie filter(), get() und create() über den standardmäßigen Manager objects zu verwenden. Wenn ein manager-spezifisches Benutzer-Modell wie CustomUser erforderlich ist, bietet Django die Manager-Klasse AbstractUserManager an. Mit dieser Klasse kann man die Logik zur Benutzererstellung anpassen.
from django.contrib.auth.models import BaseUserManager
class CustomUserManager(BaseUserManager):
def create_user(self, email, password=None, **extra_fields):
# Logik zur Benutzererstellung
pass
def create_superuser(self, email, password=None, **extra_fields):
# Logik zur Erstellung eines Superusers
pass
Durch die Verwendung eines solchen Managers kann man flexibel auf verschiedene Situationen reagieren, die während des Benutzererstellungsprozesses auftreten können. AbstractUserManager erweitert models.Manager, sodass sie alle grundlegenden Funktionen für Datenbankabfragen beinhaltet.
Verständnis der Django-Modellvererbung
Ein Verständnis der Modellvererbung in Django ermöglicht ein effizienteres Design und eine effektivere Implementierung von Modellen. Dies kann kurz zusammengefasst werden:
models.Model: Die Basis-Klasse aller Django-Modelle, die eine Zuordnung zur Datenbank herstellt und ORM-Funktionen bietet.AbstractUser: Eine abstrakte Klasse, die vonmodels.Modelerbt. Durch die Vererbung von dieser Klasse kannCustomUserals benutzerdefiniertes Benutzer-Modell mit den Funktionalitäten vonmodels.Modeleinfach definiert werden.AbstractUserManager: Ein Manager, der vonmodels.Managererbt und spezifisch für die Benutzererstellung ist. Diese Klasse ermöglicht es, die Logik zur Benutzererstellung einfach anzupassen.
Zusammenfassend lässt sich sagen, dass die Struktur von Django-Modellen sehr flexibel und gleichzeitig leistungsstark gestaltet ist. Auch bei der Erweiterung von Benutzermodellen und dem Hinzufügen benutzerdefinierter Felder kann man durch ein Verständnis der ORM-Funktionalitäten und Strukturen von AbstractUser und models.Model ein effizienteres sowie skalierbares Datenbankdesign erreichen. Wenn man diese Modellstruktur von Django gut nutzt, kann der Entwickler mit weniger Aufwand komplexe Datenbankmodelle aufbauen.
Es sind keine Kommentare vorhanden.