Created
May 13, 2021 20:18
-
-
Save AliRn76/45319f918a5fb7af5c5c03be5007865e to your computer and use it in GitHub Desktop.
Custom User Model
This file contains hidden or 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 rest_framework.authentication import TokenAuthentication | |
from .models import Token | |
class TokenAuthentication(TokenAuthentication): | |
model = Token |
This file contains hidden or 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.utils import timezone | |
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser | |
from django.db import models | |
from django.conf import settings | |
from django.db.models.signals import post_save | |
from django.dispatch import receiver | |
from django.contrib import auth | |
from rest_framework.authtoken.models import Token | |
from django.utils.translation import gettext_lazy as _ | |
class MyUserManager(BaseUserManager): | |
def create_user(self, username, is_male, password=None): | |
if not username: | |
raise ValueError('Users must have a username') | |
user = self.model( | |
username=username, | |
is_male=is_male, | |
) | |
user.set_password(password) | |
user.save(using=self._db) | |
return user | |
def create_superuser(self, username, password=None, is_male=True): | |
user = self.create_user( | |
username, | |
password=password, | |
is_male=is_male | |
) | |
user.is_admin = True | |
user.save(using=self._db) | |
return user | |
class MyUser(AbstractBaseUser): | |
username = models.CharField(max_length=127, unique=True) | |
password = models.CharField(max_length=127) | |
first_name = models.CharField(max_length=65, blank=True, null=True) | |
last_name = models.CharField(max_length=127, blank=True, null=True) | |
is_admin = models.BooleanField(default=False) | |
is_active = models.BooleanField(default=True) | |
date_joined = models.DateTimeField(auto_now_add=True) | |
last_login = models.DateTimeField(blank=True, null=True) | |
is_male = models.BooleanField(default=True) | |
profile_picture = models.ImageField(upload_to='profile_pictures/', max_length=255, blank=True, null=True) | |
email = models.EmailField(verbose_name='email address', max_length=255, blank=True, null=True) | |
birth_date = models.DateField(blank=True, null=True) | |
objects = MyUserManager() | |
USERNAME_FIELD = 'username' | |
def __str__(self): | |
return self.username | |
def has_perm(self, perm, obj=None): | |
"Does the user have a specific permission?" | |
# Simplest possible answer: Yes, always | |
return True | |
def has_module_perms(self, app_label): | |
"Does the user have permissions to view the app `app_label`?" | |
# Simplest possible answer: Yes, always | |
return True | |
@property | |
def is_staff(self): | |
"Is the user a member of staff?" | |
# Simplest possible answer: All admins are staff | |
return self.is_admin | |
class Meta: | |
db_table = 'User' | |
@receiver(post_save, sender=settings.AUTH_USER_MODEL) | |
def create_auth_token(sender, instance=None, created=False, **kwargs): | |
if created: | |
Token.objects.create(user=instance) | |
class Token(Token): | |
key = models.CharField(_("Key"), max_length=40, primary_key=True) | |
user = models.ForeignKey(User, related_name='auth_tokens', on_delete=models.CASCADE, verbose_name=_("User")) | |
created = models.DateTimeField(_("Created"), auto_now_add=True) |
This file contains hidden or 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
... + | |
REST_FRAMEWORK = { | |
'DEFAULT_AUTHENTICATION_CLASSES': [ | |
'your_project.authentication.TokenAuthentication', | |
], | |
} | |
+ ... + | |
AUTH_USER_MODEL = 'user.User' | |
+ ... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment