Django'da özel bir kullanıcı modeli oluşturmaya çalışıyorum. Benim models.py şuna benzer:Django'da özel bir kullanıcı modeli kullanırken şifrem neden güvenceye alınmıyor?
class UserManager(BaseUserManager):
def _create_user(self, username, email, password, is_staff, is_superuser, **extra_fields):
now = timezone.now()
if not username:
raise ValueError(_('The given username must be set'))
if not email:
raise ValueError(_('The given email must be set'))
email = self.normalize_email(email)
user = self.model(
username=username, email=email,
is_staff=is_staff, is_active=False,
is_superuser=is_superuser, last_login=now,
date_joined=now, **extra_fields
)
user.set_password(password)
user.save(using=self._db)
return user
def create_user(self, username, email, password=None, **extra_fields):
return self._create_user(username, email, password, False, False, **extra_fields)
def create_superuser(self, username, email, password, **extra_fields):
user=self._create_user(username, email, password, True, True, **extra_fields)
user.is_active=True
user.save(using=self._db)
return user
class User(AbstractBaseUser, PermissionsMixin):
# Standard fields
username = models.CharField(_('username'), max_length=30, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters'),
validators=[
validators.RegexValidator(re.compile('^[\[email protected]+-]+$'), _('Enter a valid username.'), _('invalid'))
])
first_name = models.CharField(_('first name'), max_length=30, blank=True, null=True)
last_name = models.CharField(_('last name'), max_length=30, blank=True, null=True)
email = models.EmailField(_('email address'), max_length=255)
is_staff = models.BooleanField(_('staff status'), default=False,
help_text=_('Designates whether the user can log into this admin site.'))
is_active = models.BooleanField(_('active'), default=True,
help_text=_('Designates whether this user should be treated as active. Unselect this instead of deleting accounts.'))
date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
# Custom fields
is_publisher = models.BooleanField(_('publisher status'), default=False)
# User manager
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class Meta:
verbose_name = _('user')
verbose_name_plural = _('users')
def get_full_name(self):
full_name = '%s %s' % (self.first_name, self.last_name)
return full_name.strip()
def get_short_name(self):
return self.first_name
def email_user(self, subject, message, from_email=None):
send_mail(subject, message, from_email, [self.email])
Neyse, createsuperuser komutunu kullanarak bir süper kullanıcı oluşturmak eğer, her şey iyi çalışır: kullanıcı oluşturulduğunda, ve şifrenin doğru karma ve sabitlenir. Ancak, yönetici panelimden bir kullanıcı oluşturursam, oluşturulan kullanıcının şifresi tamamen açıkta kalır. Ayrıca, Django'da kullanılan normal kullanıcı modelinde yaptığı onaylama alanı görünmüyor. Bu sorunu nasıl çözebilirim?
Ayrıca, evet benim settings.py dosyasında AUTH_USER_MODEL = 'myapp.User' var.
Parolayı ele almakla ilgilenen bir model yönetici sınıfı kullanmanız gerekir. Daha fazla bilgi için bkz. [Docs'daki örnek] (https://docs.djangoproject.com/en/1.9/topics/auth/customizing/#a-full-example). – Alasdair