| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 | # -*- coding: utf-8 -*-
import re
from django.contrib.auth.models import BaseUserManager
from django.core import validators
from django.db import models
from django.utils.translation import gettext_lazy as _
from oscar.apps.customer.abstract_models import AbstractUser
class CustomUserManager(BaseUserManager):
    def create_user(self, username, email, password):
        """
        Creates and saves a User with the given email and password.
        """
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=CustomUserManager.normalize_email(email),
            username=username,
            is_active=True,
        )
        user.set_password(password)
        user.save(using=self._db)
        return user
    def create_superuser(self, username, email, password):
        u = self.create_user(username, email, password=password)
        u.is_admin = True
        u.is_staff = True
        u.save(using=self._db)
        return u
class User(AbstractUser):
    """
    Custom user based on Oscar's AbstractUser
    """
    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(r'^[\w.@+-]+$'), _('Enter a valid username.'), 'invalid')
        ])
    extra_field = models.CharField(
        _('Nobody needs me'), max_length=5, blank=True)
    objects = CustomUserManager()
    class Meta:
        app_label = 'myauth'
 |