Legen Sie das benutzerdefinierte Benutzermodell in Django fest.
Dieser Artikel ist Teil des Projekts Auf Docker aufbauen und auf AWS Fargate bereitstellen.
Standardmäßig ist für Django ein Benutzermodell festgelegt. Wenn Sie jedoch tatsächlich eine App erstellen, gibt es immer Zeiten, in denen Sie das Benutzermodell an die von Ihnen erstellte App anpassen möchten. Es ist sehr schwierig, das Benutzermodell nach einigen Codierungsvorgängen zu ändern. Es wird daher empfohlen, das benutzerdefinierte Benutzermodell zu Beginn des Projekts festzulegen.
Verwenden Sie zum Implementieren des benutzerdefinierten Benutzermodells die Klasse "AbstractUser" oder die Klasse "AbstractBaseUser". Die "AbstractUser" -Klasse ist eine einfache Möglichkeit, die Standardbenutzerfelder und die Authentifizierung zu erweitern. Die Methode zur Verwendung der Klasse "AbstractBaseUser" erhöht den Codierungsaufwand, kann jedoch detaillierter angepasst werden.
Dieses Mal werden wir es mit "Abstract User" implementieren. Ich habe auch "Abstract User" verwendet, um das Benutzermodell in den Projekten anzupassen, an deren Entwicklung ich beteiligt war. Für die allgemeine Benutzerverwaltung ist "Abstrakter Benutzer" ausreichend.
Implementieren Sie das benutzerdefinierte Benutzermodell in dem Projekt, das in Verwenden von PostgreSQL mit Docker + Django erstellt wurde.
Erstellen Sie zunächst eine Benutzer-App, die benutzerdefinierte Benutzer mit dem Befehl startapp verwaltet. Fügen Sie dann den Code für das benutzerdefinierte Benutzermodell zu settings.py hinzu.
docker-compose exec web python manage.py startapp users
Fügen wir die erstellten Benutzer zu settings.py hinzu. Geben Sie am Ende außerdem an, dass anstelle des Standardbenutzermodells ein benutzerdefiniertes Benutzermodell verwendet wird.
setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Local
'users.apps.UsersConfig', #hinzufügen
]
...
AUTH_USER_MODEL = 'users.CustomUser' #hinzufügen
Erstellen Sie eine CustomUser-Klasse in models.py. Dieses Mal werden keine Felder aus dem Standardbenutzermodell hinzugefügt. Fügen Sie daher den Pass direkt darunter hinzu. Wenn Sie ein eigenes Feld festlegen möchten, fügen Sie das Feld hier hinzu.
users/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
pass
Erstellen Sie users / forms.py und fügen Sie den folgenden Code hinzu.
users/form.py
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserCreationForm, UserChangeForm
class CustomUserCreationForm(UserCreationForm):
class Meta(UserCreationForm):
model = get_user_model()
fields = ('email', 'username',)
class CustomUserChangeForm(UserChangeForm):
class Meta(UserChangeForm):
model = get_user_model()
fields = ('email', 'username',)
Fügen Sie admin.py den folgenden Code hinzu.
users/admin.py
from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin
from .forms import CustomUserCreationForm, CustomUserChangeForm
CustomUser = get_user_model()
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['email', 'username',]
admin.site.register(CustomUser, CustomUserAdmin)
Damit sind die Einstellungen abgeschlossen. Lassen Sie uns zum Schluss migrieren.
docker-compose exec web python manage.py makemigrations users
docker-compose exec web python manage.py migrate