You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

58 lines
2.3 KiB

# -*- coding: utf-8 -*-
import hashlib
from random import random
from django.utils import timezone
from django.db import models
from django.contrib.auth.models import BaseUserManager
class ConfirmEmailManager(models.Manager):
def confirm(self, user):
"""Создает или обновляет запись, что email подтвержден."""
rec, created = self.get_or_create(user=user, defaults={'is_confirmed': True,})
return rec
def unconfirm(self, user):
"""Создает или обновляет запись, что нужно подтвердить email."""
rec, created = self.get_or_create(user=user, defaults={'is_confirmed': False,})
return rec
class ResetKeyManager(models.Manager):
def create_key(self, user):
"""Создает или обновляет ключ восстановления пароля."""
key = hashlib.sha1('%s' % random()).hexdigest()
reset_key, created = self.get_or_create(user=user, defaults={'key': key,})
if not created:
reset_key.key = key # обновить ключ
reset_key.save()
return reset_key
class CustomUserManager(BaseUserManager):
def _create_user(self, username, email, password,
is_staff, is_superuser, **extra_fields):
"""
Creates and saves a User with the given email and password.
"""
now = timezone.now()
if not email :
raise ValueError('The given email must be set')
email = self.normalize_email(email)
user = self.model(email=email,
username=username,
is_staff=is_staff, is_active=True,
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):
return self._create_user(username, email, password, True, True,
**extra_fields)