Wednesday, February 19, 2020

djoser and custom user model

from django.contrib import admin
from .models import MyUser

# Register your models here.
admin.site.register(MyUser)
from django.db import models
from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin


# Create your models here.
class MyUserManager(BaseUserManager):
def create_user(self, email, username, password=None, is_active=True, is_admin=False, is_staff=False,
**extra_fields):
"""
Create and save a User with the given email and password.
"""
if not email:
raise ValueError("The Email must be set")
if not username:
raise ValueError("The Username must be set")
if not password:
raise ValueError("The Password must be set'")

user_obj = self.model(email=self.normalize_email(email))

user_obj.set_password(password)
user_obj.username = username
user_obj.email = email
user_obj.active = is_active
user_obj.admin = is_admin
user_obj.staff = is_staff
user_obj.save(using=self._db)
return user_obj

def create_staff(self, email, username, password=None, **extra_fields):

myuser = self.create_user(email=email, username=username, password=password, is_staff=True)
myuser.active = True
myuser.staff = True
myuser.save(using=self._db)
return myuser

def create_superuser(self, email, password, username, **extra_fields):
myuser = self.create_user(email=email, username=username, password=password, is_staff=True, is_admin=True,
**extra_fields)
myuser.active = True
myuser.staff = True
myuser.admin = True
myuser.save(using=self._db)
return myuser


class MyUser(AbstractBaseUser):
email = models.EmailField(max_length=60, unique=True)
username = models.CharField(max_length=60, unique=True)
phone = models.CharField(null=True, max_length=15)
first_name = models.CharField(max_length=60, null=True)
last_name = models.CharField(max_length=60, null=True)
active = models.BooleanField(default=True)
staff = models.BooleanField(default=False)
admin = models.BooleanField(default=False)
timestamp = models.DateTimeField(auto_now_add=True)

USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username', 'phone', 'first_name', 'last_name', 'is_admin', 'is_staff']

objects = MyUserManager()

def __str__(self):
return self.email + ',' + self.username

def has_perm(self, perm, obj=None):
return self.admin

def has_module_perms(self, app_label):
return True

@property
def is_staff(self):
return self.staff

@property
def is_admin(self):
return self.admin

@property
def is_active(self):
return self.active
from rest_framework import serializers
from djoser.serializers import UserCreateSerializer
from .models import MyUser
from rest_framework.authtoken.models import Token


class MyUserCreateSerializer(UserCreateSerializer):
class Meta(UserCreateSerializer.Meta):
model = MyUser
fields = '__all__'


# class MyUserSerializer(serializers.ModelSerializer):
# class Meta:
# model = MyUser
# fields = '__all__'
# extra_kwargs = {'password': {'write_only': True, 'required': True}}
#
# def create(self, validated_data):
# user = MyUser.objects.create_user(**validated_data)
# user.is_active = True
# Token.objects.create(user=user)
# return user
from django.urls import path
from django.conf.urls import include
from rest_framework.routers import DefaultRouter
from rest_framework import routers

# from .views import MyUserViewSet
from rest_framework.authtoken.views import obtain_auth_token

router = routers.DefaultRouter()
# router.register('myusers', MyUserViewSet)

urlpatterns = [
path('', include(router.urls)),
path('', include('djoser.urls')),
path('', include('djoser.urls.authtoken')),
# path('login', obtain_auth_token, name='login'),
]

Hello team,
I need help with understanding how djoser and custom user model works better.
Problem breakdown
First, I'm trying to manage my system users. I want to implement customers, employees, and admin as users in the system. I want to know if I should create a separate table in my DB for employees after setting staff=true in my custom user model.
Can you help me understand what it means and how to use staff=true to create an employee system user?

Secondly, I want the token to be generated on creating a user but that too is not happening.
Note: I can create a token for a user via the admin interface.
Attached are some of my project files.

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/CAAw18mB12Wj2YCrvmJFQbPX%3DAm-g4Wh7-ngDWZehhGBDgFq%3DKw%40mail.gmail.com.

No comments:

Post a Comment