[PYTHON] Implémenter un modèle utilisateur personnalisé dans Django

introduction

Définissez le modèle utilisateur personnalisé dans Django.

Cet article fait partie du projet Build on Docker and Deploy to AWS Fargate.

Raisons d'utiliser le modèle utilisateur personnalisé

Par défaut, Django a un ensemble de modèles utilisateur. Cependant, lorsque vous créez réellement une application, il y aura toujours des moments où vous souhaiterez modifier le modèle utilisateur pour qu'il corresponde à l'application que vous avez créée. Comme il est très difficile de modifier le modèle utilisateur une fois que le codage a progressé dans une certaine mesure, il est recommandé de définir le modèle utilisateur personnalisé dès le début du projet.

À propos de la mise en œuvre du modèle utilisateur personnalisé

Pour implémenter le modèle utilisateur personnalisé, utilisez la classe "AbstractUser" ou la classe "AbstractBaseUser". La classe "AbstractUser" est un moyen simple d'étendre les champs utilisateur par défaut et l'authentification. La méthode d'utilisation de la classe "AbstractBaseUser" augmente la quantité de codage, mais elle peut être personnalisée plus en détail.

Cette fois, nous allons l'implémenter en utilisant "Abstract User". J'ai également utilisé "Abstract User" pour personnaliser le modèle utilisateur dans les projets que j'ai participé au développement. Si vous souhaitez gérer des utilisateurs généraux, "Utilisateur abstrait" suffit.

Préparation

Implémentez le modèle utilisateur personnalisé dans le projet créé dans Utilisation de PostgreSQL avec Docker + Django.

Ajouter une application pour les utilisateurs

Tout d'abord, créez une application d'utilisateurs qui gère les utilisateurs personnalisés avec la commande startapp. Ajoutez ensuite le code associé au modèle utilisateur personnalisé à setting.py.

docker-compose exec web python manage.py startapp users

Ajoutons les utilisateurs créés à setting.py. En outre, à la fin, indiquez qu'un modèle utilisateur personnalisé sera utilisé à la place du modèle utilisateur par défaut.

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', #ajouter à
]
...
AUTH_USER_MODEL = 'users.CustomUser' #ajouter à

Ajouter un utilisateur personnalisé au modèle

Créez une classe CustomUser dans models.py. Cette fois, nous n'ajouterons pas de champs à partir du modèle utilisateur par défaut, donc ajoutez une passe directement en dessous. Si vous souhaitez définir votre propre champ, veuillez ajouter le champ ici.

users/models.py


from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    pass

Création de formulaires utilisateur personnalisés

Créez users / forms.py et ajoutez le code suivant.

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',)

Paramètres d'administration des utilisateurs personnalisés

Ajoutez le code suivant à admin.py.

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)

Ceci termine les réglages. Enfin, migrons.

docker-compose exec web python manage.py makemigrations users
docker-compose exec web python manage.py migrate

Recommended Posts

Implémenter un modèle utilisateur personnalisé dans Django
Implémenter un décorateur de vue personnalisé avec Pyramid
Modifications du modèle dans Django
Qu'est-ce qu'un chien? Django - Créer un modèle utilisateur personnalisé 2
Implémentation de la fonction d'authentification du modèle utilisateur personnalisé dans Django REST Framework à l'aide de djoser
Implémenter la fonction de suivi dans Django
Comment utiliser fixture dans Django pour saisir des exemples de données associés au modèle utilisateur
L'utilisateur n'est pas ajouté avec succès après la création d'un modèle d'utilisateur personnalisé
Implémenter un paramètre de date dans Tkinter
Implémenter l'application Django sur Hy
[Ma note] Modèle utilisateur personnalisé de Django
Modèle d'espace d'états personnalisé en Python
Créer un bot LINE avec Django
Installer Django dans l'environnement virtuel pipenv
Django: la migration ne reflète pas le modèle dans DB
Utiliser un modèle scikit-learn formé à PySpark
Créez un modèle pour votre planning Django
Somme des variables dans un modèle mathématique
Implémentez GraphGatherLayer de DeepChem avec la couche personnalisée de PyTorch
Spécifiez dynamiquement le jeu de requêtes ModelChoiceField dans Django
Obtenir un modèle de référence à l'aide de Django Serializer
Implémenter un modèle avec état et comportement
Comment implémenter la fonctionnalité de type helper Rails dans Django
Modèle Django: ManyToManyField
Modèle dans Django
Démarrez Django dans un environnement virtuel à l'aide de Pipenv
Si vous souhaitez afficher la valeur à l'aide des choix du modèle dans le modèle Django
Activez Django https en quelques lignes
Créez un environnement Django avec Vagrant en 5 minutes
Comment implémenter un sélecteur de dégradé dans Houdini
Implémenter l'autorisation personnalisée pour l'authentification Firebase dans Chalice
J'ai essayé d'implémenter TOPIC MODEL en Python
Envoyer un e-mail avec un utilisateur autre que EMAIL_HOST_USER écrit dans les paramètres de django
Créer un modèle d'investissement dynamique simple en Python
Passer les informations de connexion à afficher dans Django
Utilisez une page d'erreur personnalisée avec python / tornado
Configurer un module avec plusieurs fichiers dans Django
Implémenter un modèle de régression logistique en temps discret avec stan
Comment créer une API Rest dans Django
Jusqu'à ce que vous créiez une nouvelle application dans Django
Formulaire à Django
Je veux facilement implémenter le délai d'expiration en python
Comment obtenir plusieurs objets de modèle au hasard dans Django
J'ai essayé d'implémenter un pseudo pachislot en Python
Implémentez l'extension utilisateur Django et enregistrez les informations jointes
[Django] Implémenter une fonction de téléchargement de fichier image qui n'utilise pas de modèle
Comment référencer des fichiers statiques dans un projet Django
[Django] Donne à Form une valeur initiale dynamique de Model
Implémenter des URL hiérarchiques avec des routeurs imbriqués drf dans le framework Django REST
Créer un planning Django
django a fait des recherches sur la gestion des utilisateurs
Mettre en œuvre des recommandations en Python
Implémenter XENO avec python
Comment créer un enregistrement en collant une relation au modèle source d'héritage dans le modèle hérité par Django
dict in dict Transforme un dict en dict
Une histoire qui rend le débogage de modèle plus facile à voir dans l'environnement Django + SQLAlchemy
[Django] Noms de champs pouvant être utilisés pour le modèle utilisateur, l'enregistrement des utilisateurs et les méthodes de connexion
Tri personnalisé en Python3
Implémenter sum en Python