Last active
August 29, 2015 14:00
-
-
Save FZambia/11171792 to your computer and use it in GitHub Desktop.
django custom user
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
from django.contrib import admin | |
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin | |
from django.utils.translation import ugettext_lazy as _ | |
from users.forms import UserChangeForm, UserCreationForm | |
from users.models import User | |
class UserAdmin(BaseUserAdmin): | |
fieldsets = ( | |
(None, {'fields': ('email', 'password', 'first_name', 'last_name')}), | |
(_('Permissions'), {'fields': ('is_active', 'is_staff', 'is_superuser', | |
'groups', 'user_permissions')}), | |
(_('Important dates'), {'fields': ('last_login', 'date_joined')}), | |
) | |
add_fieldsets = ( | |
( | |
None, | |
{ | |
'classes': ('wide',), | |
'fields': ('email', 'password1', 'password2') | |
} | |
), | |
) | |
# The forms to add and change user instances | |
form = UserChangeForm | |
add_form = UserCreationForm | |
# The fields to be used in displaying the User model. | |
# These override the definitions on the base UserAdmin | |
# that reference specific fields on auth.User. | |
list_display = ('email', 'is_staff') | |
list_filter = ('is_staff', 'is_superuser', 'is_active', 'groups') | |
search_fields = ('email',) | |
ordering = ('email',) | |
filter_horizontal = ('groups', 'user_permissions',) | |
# Register the new EmailUserAdmin | |
admin.site.register(User, UserAdmin) |
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
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin | |
from django.core.mail import send_mail | |
from django.db import models | |
from django.utils import timezone | |
from django.utils.translation import ugettext_lazy as _ | |
class UserManager(BaseUserManager): | |
def _create_user(self, email, password, | |
is_staff, is_superuser, **extra_fields): | |
""" | |
Creates and saves an EmailUser 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, | |
date_joined=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 AbstractUser(AbstractBaseUser, PermissionsMixin): | |
""" | |
Inherits from both the AbstractBaseUser and PermissionMixin. | |
The following attributes are inherited from the superclasses: | |
* password | |
* last_login | |
* is_superuser | |
""" | |
email = models.EmailField( | |
_('email address'), max_length=255, unique=True, db_index=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.') | |
) | |
date_joined = models.DateTimeField(_('date joined'), default=timezone.now) | |
first_name = models.CharField(_('first name'), max_length=30, blank=True) | |
last_name = models.CharField(_('last name'), max_length=30, blank=True) | |
objects = UserManager() | |
USERNAME_FIELD = 'email' | |
REQUIRED_FIELDS = [] | |
class Meta: | |
verbose_name = _('user') | |
verbose_name_plural = _('users') | |
abstract = True | |
def get_full_name(self): | |
""" | |
Returns the email. | |
""" | |
if self.first_name and self.last_name: | |
return "{0} {1}".format(self.first_name, self.last_name) | |
return self.email | |
def get_short_name(self): | |
""" | |
Returns the email. | |
""" | |
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]) | |
class User(AbstractUser): | |
class Meta(AbstractUser.Meta): | |
swappable = 'AUTH_USER_MODEL' | |
abstract = False |
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
""" | |
AUTH_USER_MODEL = 'users.User' | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment