# -*- 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)