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

王林
Freigeben: 2024-08-13 14:32:38
Original
384 Leute haben es durchsucht

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 – Soziale Anmeldung 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 zu verwalten.

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'
Nach dem Login kopieren

Wir können ein neues Benutzermodell definieren, das das AbstractBaseUser-Modell von Django erweitert. 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'
Nach dem Login kopieren

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)
Nach dem Login kopieren

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
Nach dem Login kopieren

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 vorab den UserManager für 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
Nach dem Login kopieren

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 AllAuth-Benutzernamenverwaltung, 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, das verspreche ich ... mit gedrückten Daumen), wie zum Beispiel:

  • 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 Programmierfähigkeiten zu verbessern. Ich bin auch ein selbstveröffentlichter Fantasy-Autor mit vier veröffentlichten Romanen. Fühlen Sie sich frei, mich alles zu fragen!

Das obige ist der detaillierte Inhalt vonDjango AllAuth-Kapitel Erweiterung des Django AllAuth-Benutzermodells mit benutzerdefinierten Feldern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!