insert and update model and serializer with model permission in django

 Insert and update - in drf

 

File: views.py

class UserAction(APIView):

    authentication_classes = [JWTAuthentication]

    permission_classes = [IsAuthenticated]

 

    # create

    def post(self, request, format=None):

        data = request.data

        user = request.user

        if user.is_member:

            try:

                serializer = UserSerializer(data=data)

                if serializer.is_valid(raise_exception=True):

                    serializer.save()

                    return Response({"message":"user created!"})

                else:

                    return Response({"message":"user not created!"})

            except Exception as e:

                print(e)

        else:

            return Response({"message":"unauthenticated manager requests!"})

 

    # update

    def put(self, request,pk=None, format=None):

        data = request.data

        user = request.user

        id = pk

        if id:

            if user.is_member:

                if Member.objects.filter(id=id).exists():

                    mem_obj = Member.objects.get(id=id)

                    if mem_obj.is_member:

                        return Response({"you can't update another member info"})

                    else:

                        serializer = UserSerializer(mem_obj,data=data)

                        if serializer.is_valid(raise_exception=True):

                            serializer.save()

                            return Response({"message":"user record updated!"})  

                        else:

                            return Response({"message":"record not updated!"})

                else:

                    return Response({"message":"user id not exist!"})

            else:

                return Response({"access restricted!"})

        else:

            return Response({ "sorry no userid provided! plz provide user id !! " })

 

 

File: serializers.py

class UserSerializer(serializers.ModelSerializer):

    class Meta:

        model = Member

        fields = ['name','email','password','profile','address']

    

    def create(self, validated_data):

        user = Member.objects.create(

            name = validated_data.get('name'),

            email = validated_data.get('email'),

            password = make_password(validated_data.get('password')),

            profile = validated_data.get('profile'),

            address = validated_data.get('address'),

        )

        user.save()

        return user

    

    def update(self, instance, validated_data):

        password = validated_data.get('password',)

        instance.id = validated_data.get('id', instance.id)

        instance.name = validated_data.get('name', instance.name)

        instance.email = validated_data.get('email', instance.email)

        instance.password = make_password(password)

        instance.profile = validated_data.get('profile',instance.profile)

        instance.address = validated_data.get('address',instance.address)

        instance.save()

        return instance

 

File: core.models.py

from django.db import models

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin

 

class MemberManager(BaseUserManager):

    def create_user(self,name,email,password):

        if not name:

            raise ValueError("name field required")

        if not email:

            raise ValueError("email field required")

        if not password:

            raise ValueError("password field required")

 

        user = self.model(name=name,email=self.normalize_email(email))        

        user.set_password(password)

        user.save(using = self._db)

        return user

    

    def create_superuser(self,name,email,password):

        user = self.create_user(name=name,email=email,password=password)

        user.is_member = False

        user.is_staff = True

        user.is_superuser = True

        user.save(using = self._db)

        return user

 

 

class Member(AbstractBaseUser):

    name = models.CharField(max_length=200)

    email = models.EmailField(max_length=200,unique=True)

    password = models.CharField(max_length=250)

    profile = models.ImageField(upload_to="media/core", null=True)

    address = models.TextField(null=True)

    is_active = models.BooleanField(default=True)

    is_member = models.BooleanField(default=False, null=True)

    is_staff = models.BooleanField(default=False)

    is_superuser = models.BooleanField(default=False)

 

    objects = MemberManager()

 

    USERNAME_FIELD = 'email'

    REQUIRED_FIELDS = ['name']

 

    def has_perm(self, perm, obj=None):

        return self.is_superuser

 

    def has_module_perms(self, app_label):

        return self.is_superuser

    

    def __str__(self):

        return self.name

 

File: urls.py

from .views import *

 

urlpatterns = [

    path('admin_addmember/',AddMember.as_view()),

    

    path('users/',UserAction.as_view()),

    path('users/<int:pk>',UserAction.as_view()),

    

    path('userlists/',UserAllLists.as_view()),

]

 

Popular posts from this blog

MCSL 216 MCA NEW Practical ~ common questions suggestions

dev chaeatsheet

STRAPI