Last active
August 29, 2015 14:18
-
-
Save mkoistinen/aae6aec979afe471e02f to your computer and use it in GitHub Desktop.
This is a custom user model that is known to work with Django 1.6 and django CMS 3.0.12 (probably all versions of CMS 3.0) and runs correctly on µWSGI.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from __future__ import unicode_literals | |
from django.contrib import admin | |
from .models import Customer | |
class CustomerAdmin(admin.ModelAdmin): | |
pass | |
admin.site.register(Customer, CustomerAdmin) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
import re | |
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, UserManager | |
from django.core import validators | |
from django.core.mail import send_mail | |
from django.db import models | |
from django.utils import timezone | |
from django.utils.http import urlquote | |
from django.utils.translation import ugettext_lazy as _ | |
class CustomerManager(UserManager): | |
def _create_user(self, 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, | |
is_staff=is_staff, is_active=True, | |
is_superuser=is_superuser, last_login=now, | |
**extra_fields) | |
user.set_password(password) | |
user.save(using=self._db) | |
return user | |
def create_user(self, email, password=None, **extra_fields): | |
return self._create_user(email, password, False, False, | |
**extra_fields) | |
def create_superuser(self, email, password, **extra_fields): | |
return self._create_user(email, password, True, True, | |
**extra_fields) | |
class Customer(AbstractBaseUser, PermissionsMixin): | |
""" | |
An abstract base class implementing a fully featured User model with admin- | |
compliant permissions. Primary difference is that this User Model doesn't | |
use a discreet username. The primary identifier is the users' email address. | |
Email and password are required. Other fields are optional. | |
""" | |
email = models.CharField(_('email'), max_length=30, unique=True, | |
help_text=_('Required. 30 characters or fewer. Letters, numbers and ' | |
'@/./+/-/_ characters'), | |
validators=[ | |
validators.RegexValidator(re.compile( | |
'^[\w.@+-]+$'), _('Enter a valid email.'), 'invalid')]) | |
# email = models.EmailField(_('email address'), blank=True) | |
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.')) | |
objects = CustomerManager() | |
USERNAME_FIELD = 'email' | |
REQUIRED_FIELDS = [] | |
class Meta: | |
verbose_name = _('user') | |
verbose_name_plural = _('users') | |
def get_absolute_url(self): | |
return "/users/%s/" % urlquote(self.email) | |
def get_full_name(self): | |
"Returns the short name for the user, which is the email address." | |
return "A user called %s" % self.email | |
def get_short_name(self): | |
"Returns the short name for the user, which is the email address." | |
return self.email | |
def email_user(self, subject, message, from_email=None): | |
""" | |
Sends an email to this User. | |
""" | |
send_mail(subject, message, from_email, [self.email]) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
... | |
INSTALLED_APPS = ( | |
... | |
'custom_user_model.apps.customers', # This is the app in my base project/apps containing the models.py and admin.py | |
'cms', | |
.... | |
'custom_user_model', # This is my base project | |
) | |
AUTH_USER_MODEL = 'customers.Customer' | |
... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment