Thursday, 27 October 2022

Django rest framework Project tutorials part 4

A django Application


Users

Authetication

search

list

select

cart/wishlist

booking/order

payment

notification



Users

email

mobile

password

otp

Authentication

API

register

login

generate_otp

verify_otp

forgot password

change password


Search

name

location

category


list

name

price

rate


order/booking

Payment


django application

model

serializers

views

urls


Model

class Basemodel(models.Model):

    created=datetimstamp

    updated=datetimstamp


class TableName(models.Model,User,Basemodel):

    field_name=Type

    name=models.CharField

    price=models.FloatField

    count=models.PositiveIntegerField

    is_customer=BooleanFiled

    model_name=Relation

    booking=models.Foreinkey    one to many  on_delete=models.SET_NULL ,PROTECT,

                    =models.OntoOne one to one

                    =models.ManyToMany many to many


example

class Student(models.Model)

    name=models.CharField(max_lenght=100)

    age=models.PositiveIntegerField()


class Mark(models.Model):

    subject=models.CharField(max....)

    grade=models.PositiveIntegerField()

Student and Mark

student table

id name age

1 lulu 15

2 sulu 14


mark

id subject grade student

1    maths 10        1

2    arabic    9        1

3     maths   9        2

       arabic  15     2


class Mark(models.Model):

    subject=models.CharField(max....)

    grade=models.PositiveIntegerField()

    student=models.Foreinkey(Student,)


Serializer

from rest_framework import serializers


class StudentSerializer(serializers.ModelSerailzers):

    class Meta:

        model = Student

         exclude=('created','updated') or  fieleds=('name','age') or fields= '__all__'

      


class StudentSerializer(serializers.ModelSerailzers):

    class Meta:

        model = Student

         exclude=('created','updated') or  fieleds=('name','age') or fields= '__all__'


    def to_internal_value(self, data):

            #input data manipulation

            return data


   def to_representation(self, instance);

        data= super()

        #output data manipulation

        return data

    def validate(self, attrs):

    def create(

    def update(


views

from rest_framework import viewsets


class StudentViewset(viewsets.ModelViewSet):

    queryset.Student.objects.all()

    serializer_class=StudentSerializer


    urls

    from rest_framwork.routers import SimpleRouter

    #main_url/function_name/

    http://localhost:8000/student/


    student is function name mapped to viewset function or class


    obj=SimpleRouter()

    obj.register(r'student',StudentViewset)

    urlpatterns=obj.urls



class StudentViewset(viewsets.ModelViewSet):

    queryset.Student.objects.all()

    serializer_class=StudentSerializer

    authetication_class=

    permission_class


inbuild methods with model viewset

    def create()  ===>POST

    def update()    ==>PUT,PATCH

    def retrieve()    ==>GET

    def list() ===>GET

    def destroy() ==>DELETE

   

 @action(methods=['post'],detail=True)

   def custom_function()

    eg 

        @action(methods=['POST'],detail=False,authentication_classes=[],permission_classes=[])

def login(self,request):

                pass


    

urls

    from rest_framwork.routers import SimpleRouter

    #main_url/function_name/

    http://localhost:8000/student/


    student is function name mapped to viewset function or class

student ===>StudentViewset

    router=SimpleRouter()

    router.register(r'student',StudentViewset)

    urlpatterns=router.urls



ModelViewSet

class ModelViewSet(mixins.CreateModelMixin,==>POST create

                   mixins.RetrieveModelMixin, ==>GET, retrieve

                   mixins.UpdateModelMixin, ==>PUT,PATCH update

                   mixins.DestroyModelMixin,==>DELETE destroy

                   mixins.ListModelMixin, =====>GET, list

                   GenericViewSet)


class ProfileViewset(viewsets.ModelViewSet)

create

update

list retrieve

delete



class ProfileViewsets(mixins.CreateModelMixin,GenericViewSet)

    def create() ===>POST


Admin


admin.site.register(Student)


or we can customize with adminModel


example to disable delete option from admin


class StudentModel(admin.ModelAdmin):

def get_actions(self, request):

actions = super(StudentModel, self).get_actions(request)

if 'delete_selected' in actions:

del actions['delete_selected']

return actions

def delete_model(self, request, obj):

return 0

def message_user(self, request, message, level = 30, extra_tags, fail_silently) :

message='delete not allowed'#you can give whatever messeage you want

return super().message_user(request, message, 40, extra_tags, fail_silently)

so then we can resgist Student model like 

admin.site.register(Student,StudentModel)

to get more about this overiding functions alt+click on admin.ModelAdmin


No comments:

Post a Comment