models.py
from django.db import models
import uuid
from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser)
from django.contrib.postgres.fields import ArrayField
class UserManager(BaseUserManager):
def create_user(self, email, password=None, **kwargs):
if not email:
raise ValueError('Users must have an email address')
user = self.model(email=self.normalize_email(email), **kwargs)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, password=None, **extra_fields):
user = self.create_user(email, password=password, **extra_fields)
user.is_admin = True
user.save(using=self._db)
return user
class User(AbstractBaseUser):
id = models.AutoField(primary_key=True, unique = True)
# id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
first_name = models.CharField(max_length = 50, blank = False)
last_name = models.CharField(max_length = 50, blank = False)
email = models.EmailField(verbose_name='email address', max_length=255, unique=True)
# password = models.CharField(verbose_name='password', max_length=50)
phone = models.CharField(max_length = 10, blank = False, null = False)
address = models.CharField(max_length = 200, blank = False)
gender = models.CharField(max_length = 50, blank = False)
role = models.CharField(max_length = 50, blank = False)
date_of_birth = models.DateField(null = True, blank = True)
facebook = models.CharField(max_length = 50, blank = True)
twitter = models.CharField(max_length = 50, blank = True)
instagram = models.CharField(max_length = 50, blank = True)
linkedin = models.CharField(max_length = 50, blank = True)
email_verified = models.BooleanField(null = True, default = False)
is_deleted = models.BooleanField(default=False)
deleted_time = models.DateTimeField(auto_now=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
is_admin = models.BooleanField(default=False)
last_login = models.DateTimeField(auto_now=True)
created = models.DateTimeField(auto_now_add=True, db_index=True)
modified = models.DateTimeField(auto_now=True)
objects = UserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name']
def __str__(self):
return self.email
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
Serializers.py
from rest_framework import serializers
from account.models import User
from rest_framework.authtoken.models import Token
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('__all__')
Views.py
from django.shortcuts import render
# from django.contrib.auth import authenticate
# from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from account.models import User
from account.serializers import UserSerializer
from rest_framework.permissions import AllowAny
from rest_framework import serializers
# import requests
class RegisterUser(APIView):
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('first_name', 'last_name', 'email','password')
def post(self, request): #################################### create user post
first_name = request.data.get("first_name")
last_name = request.data.get("last_name")
email = request.data.get("email")
password = request.data.get("password")
is_admin = request.data.get("is_admin")
user = User()
user.first_name = first_name
user.last_name = last_name
user.email = email
user.password = password
user.is_admin = is_admin
user.save()
return Response({"status": True, "user": UserSerializer(user).data})
def get(self, request, *args, **kwargs): #################################### get all user
users = User.objects.all()
return Response({"status": True, "users": UserSerializer(users, many = True).data})