Un certain temps s'est écoulé depuis 2008 et il est temps de trouver de nouvelles réponses. Depuis Django 1.5, vous serez en mesure de créer une classe d'utilisateur personnalisée. En fait, à l'heure où j'écris ces lignes, elle a déjà été intégrée dans master, vous pouvez donc l'essayer.
Il y a des informations à ce sujet dans docs ou, si vous voulez approfondir le sujet, en cet engagement .
Tout ce que vous avez à faire est d'ajouter AUTH_USER_MODEL
aux paramètres avec le chemin vers la classe d'utilisateur personnalisée, qui étend soit AbstractBaseUser
(version plus personnalisable) ou AbstractUser
(plus ou moins ancienne classe d'utilisateur que vous pouvez étendre).
Pour les personnes qui ont la flemme de cliquer, voici un exemple de code (tiré de docs ) :
from django.db import models
from django.contrib.auth.models import (
BaseUserManager, AbstractBaseUser
)
class MyUserManager(BaseUserManager):
def create_user(self, email, date_of_birth, password=None):
"""
Creates and saves a User with the given email, date of
birth and password.
"""
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=MyUserManager.normalize_email(email),
date_of_birth=date_of_birth,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, username, date_of_birth, password):
"""
Creates and saves a superuser with the given email, date of
birth and password.
"""
u = self.create_user(username,
password=password,
date_of_birth=date_of_birth
)
u.is_admin = True
u.save(using=self._db)
return u
class MyUser(AbstractBaseUser):
email = models.EmailField(
verbose_name='email address',
max_length=255,
unique=True,
)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['date_of_birth']
def get_full_name(self):
# The user is identified by their email address
return self.email
def get_short_name(self):
# The user is identified by their email address
return self.email
def __unicode__(self):
return self.email
def has_perm(self, perm, obj=None):
"Does the user have a specific permission?"
# Simplest possible answer: Yes, always
return True
def has_module_perms(self, app_label):
"Does the user have permissions to view the app `app_label`?"
# Simplest possible answer: Yes, always
return True
@property
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All admins are staff
return self.is_admin
31 votes
La plupart des réponses sont périmées/dépréciées. Veuillez consulter stackoverflow.com/a/22856042/781695 & stackoverflow.com/q/14104677/781695 & stackoverflow.com/q/16880461/781695
1 votes
@buffer - La première question à laquelle vous avez fait référence (stackoverflow.com/a/22856042/781695) a été supprimée. Les autres questions sont toujours valables.
3 votes
Pour utiliser l'email au lieu du nom d'utilisateur pour l'authentification, cet article est utile.
0 votes
learnbatta.com/blog/using-custom-user-model-in-django-23
0 votes
Je suis assez fasciné de voir que la question a été posée en 2008, avant la sortie de Django.
0 votes
Cet article de blog est utile : dontrepeatyourself.org/post/