„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Django AllAuth-Kapitel Erweiterung des Django AllAuth-Benutzermodells mit benutzerdefinierten Feldern

Django AllAuth-Kapitel Erweiterung des Django AllAuth-Benutzermodells mit benutzerdefinierten Feldern

Veröffentlicht am 25.08.2024
Durchsuche:183

HINWEIS: Dieser Artikel wurde ursprünglich auf meinem Substack unter https://andresalvareziglesias.substack.com/ veröffentlicht.

Dies ist das letzte Kapitel dieser Django AllAuth-Beitragsreihe. In diesen fünf Kapiteln haben wir ein kleines Wunder entdeckt, eine wirklich hilfreiche Django-Komponente, die alle unsere Authentifizierungsanforderungen erfüllt. In diesem Kapitel erfahren Sie, wie Sie das grundlegende Django-Benutzermodell erweitern, um benutzerdefinierte Felder hinzuzufügen.

Liste der Kapitel

  • Kapitel 1 – Die Komplettlösung für Auth in Django
  • Kapitel 2 – So installieren und konfigurieren Sie Django AllAuth
  • Kapitel 3 – Soziales Login mit Django AllAuth
  • Kapitel 4 – Anpassen der Django AllAuth-Benutzeroberfläche
  • Kapitel 5 – Erweitern des Django AllAuth-Benutzermodells mit benutzerdefinierten Feldern ←Dieses hier!

Django AllAuth Chapter  Extending Django AllAuth user model with custom fields

Django-Benutzermodell

AllAuth verwendet das Standard-Django-Benutzermodell sowie einige zusätzliche Tabellen zur Verwaltung von Social-Login- und Login-Tokens. In Django 5 befindet sich das Benutzermodell im Paket django.contrib.auth und verfügt über eine Reihe vordefinierter Felder, wie Sie im offiziellen Dokument lesen können:

  • https://docs.djangoproject.com/en/5.0/ref/contrib/auth/

Manchmal reicht das für unser Projekt nicht aus. Mit Django können Sie benutzerdefinierte Benutzertabellen und Benutzermanager erstellen, um den Anforderungen jedes Projekts gerecht zu werden.

Wir werden eine benutzerdefinierte Benutzertabelle und einen benutzerdefinierten UserManager erstellen, um unsere Anmelde- und Registrierungsprozesse abzuwickeln.

Erstellen einer benutzerdefinierten Benutzertabelle

Öffnen Sie models.py in unserem Beispielprojekt und schreiben Sie einen Code wie diesen:

class MyCustomUser(AbstractBaseUser):
   email = models.EmailField(unique=True)
   first_name = models.CharField(max_length=30, blank=True)
   last_name = models.CharField(max_length=30, blank=True)
   is_active = models.BooleanField(default=True)
   is_admin = models.BooleanField(default=False)
   timezone = models.CharField(max_length=30, default='UTC')
   is_custom = models.BooleanField(default=False)
   is_staff = models.BooleanField(default=False)
   created_at = models.DateTimeField(auto_now_add=True)
   updated_at = models.DateTimeField(auto_now=True)

   objects = MyCustomUserManager()
   USERNAME_FIELD = 'email'
   EMAIL_FIELD = 'email'

   def __str__(self):
       return self.email
   def has_perm(self, perm, obj=None):
       return True
   def has_module_perms(self, app_label):
       return True

   @property
   def is_utc(self):
       return self.timezone == 'UTC'

Wir können ein neues Benutzermodell definieren, das vom AbstractBaseUser-Modell von Django erweitert wird. In diesem neuen Modell können wir alle Felder oder benutzerdefinierten Eigenschaften hinzufügen, die wir benötigen.

Diese Zeilen sind wichtig:

   objects = MyCustomUserManager()
   USERNAME_FIELD = 'email'
   EMAIL_FIELD = 'email'

Mit diesen Zeilen verknüpfen wir das Benutzermodell mit unserem benutzerdefinierten UserManager und definieren außerdem das Feld, das als eindeutiger „Benutzername“ fungiert.

Denken Sie daran, das neue Modell in admin.py zu registrieren, um es über das Django-Administrationstool zu verwalten.

from django.contrib import admin
from .models import MyCustomUser

admin.site.register(MyCustomUser)

Erstellen eines benutzerdefinierten Benutzermanagers

Öffnen Sie models.py erneut in unserem Beispielprojekt (oder generieren Sie eine andere Datei für den benutzerdefinierten UserManager, wenn Sie möchten) und schreiben Sie einen Code wie diesen:

class MyCustomUserManager(BaseUserManager):

   def create_user(self, email, password=None):
       if not email:
           raise ValueError('Users must have an email address')

       user = self.model(
           email=self.normalize_email(email),
       )

       user.set_password(password)

       user.save(using=self._db)
       return user

   def create_superuser(self, email, password):
       user = self.create_user(
           email=email,
           password=password,
       )

       user.is_admin = True
       user.is_staff = True

       user.save(using=self._db)
       return user

In diesem Beispiel erweitern wir BaseUserManager, um unseren benutzerdefinierten UserManager zu erstellen. Es erstellt unsere neuen Benutzer und füllt die benutzerdefinierten Felder wie erwartet aus.

Wir haben vor dem UserManager unser benutzerdefiniertes Benutzermodell definiert, damit Django weiß, welche Klasse bei der Erstellung neuer Benutzer verwendet werden soll.

Verwenden des benutzerdefinierten Benutzermanagers und Modells

In der Einstellungsdatei unseres Projekts können wir das aktuelle Benutzermodell für unser Projekt festlegen mit:

# Set custom user model as the active one
AUTH_USER_MODEL = 'demo.MyCustomUser'

# Configure AllAuth username related management, because we are 
# using the e-mail as username. See:
# https://docs.allauth.org/en/latest/account/advanced.html
ACCOUNT_AUTHENTICATION_METHOD = 'email'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_UNIQUE_EMAIL = True
ACCOUNT_USERNAME_REQUIRED = False
ACCOUNT_USER_MODEL_USERNAME_FIELD = None

Mit nur dieser kleinen Änderung (und wie üblich der erforderlichen DB-Migration) können wir damit beginnen, Benutzer mit AllAuth-Anmeldeansichten zu erstellen, um unseren glänzenden benutzerdefinierten UserManager und sein Modell in Aktion zu sehen. Schnell und einfach.

Wir deaktivieren auch die Verwaltung des AllAuth-Benutzernamens, da wir in diesem Beispiel die E-Mail-Adresse als Benutzernamen verwenden.

Und das ist das Ende... oder nicht?

Wir haben das letzte Kapitel dieser AllAuth-Reihe erreicht. AllAuth ist eine wunderbare Bibliothek für die Authentifizierung in unseren Apps und erleichtert dank der großen Liste vordefinierter Integrationen die Arbeit mit Social-Logins besonders.

Dies ist das letzte Kapitel der Serie, aber ich werde AllAuth in zukünftigen Beiträgen noch einmal aufgreifen. Vielen Dank fürs Lesen und viel Spaß beim Codieren!

Über die Liste

Neben den Python- und Docker-Beiträgen werde ich auch über andere verwandte Themen schreiben (immer Technik- und Programmierthemen, ich verspreche ... mit gedrückten Daumen), wie:

  • Softwarearchitektur
  • Programmierumgebungen
  • Linux-Betriebssystem
  • Usw.

Wenn Sie eine interessante Technologie, Programmiersprache oder was auch immer gefunden haben, lassen Sie es mich bitte wissen! Ich bin immer offen dafür, etwas Neues zu lernen!

Über den Autor

Ich bin Andrés, ein Full-Stack-Softwareentwickler mit Sitz in Palma, auf einer persönlichen Reise, um meine Programmierkenntnisse zu verbessern. Ich bin außerdem ein selbstveröffentlichter Fantasy-Autor mit vier veröffentlichten Romanen. Fühlen Sie sich frei, mich alles zu fragen!

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/doctorserone/django-allauth-chapter-5-extending-django-allauth-user-model-with-custom-fields-55ia?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3