Searching...
Friday, November 26, 2021

API Paging List with Limit offset with class Django APIview - ebook tutorial

9:45 AM

Welcome to ebook media tutorial, for this session I will discus about how to build django rest framework APIview class for pagination with my custom, for this session  I hope you have setup your project django,  this so easy to use and simple, for the issue case problem how to make lkie this ?limit=10&offset=1, and show number page of bottom line page [1,2,3,4,10,11,12,15]  for output will show like above:

This's great if you want to handle limit and offset on a per view basis fro impelementation for your project CRUD, with your team front-end.



basic url for paging like this : http://localhost:8000/access/api/v1/spost?id=&limit=3&offset=3 for setting url: in root folder "mine": access->urls.py

from django.urls import path
from django.conf import settings
from .views import *
from .import views

urlpatterns =[
  
   path('api/v1/spost',views.AccessPostApi.as_view(),name="post-access"),
]

  

Script Function Paging limit and offset

this file in folder access->views->pagingku.py

def pagingku(limit,offset,mdl):
    if limit:
        if offset:
            if int(offset) > 0:
                mdl =mdl[int(offset):int(limit)+int(offset)]
            else:
                mdl =mdl[int(offset):int(limit)]
        else:
            mdl =mdl[0:int(limit)]
    else:
        mdl =mdl[0:10]
    
    return mdl

def listpageku(offset,total):
    if offset !='':
        offset = int(offset)
    if offset =='':
        offset = 0
        
    list_page = []
    if offset >=1:
        list_page.append(1)
    if offset+3 < total:
        for i in range(offset,offset+4):
            list_page.append(i)
    else:
        for i in range(offset,total):
            list_page.append(i)
    list_page.append(offset-1)

    if int(total)-3 > 0:
        for i in range(total-3,total+1):
            list_page.append(i)
    else:
        for i in range(1,total+1):
            list_page.append(i)
    list_page =list(set(list_page))
    if 0 in list_page:
        list_page.remove(0)
    list_page.sort()

    return list_page
 	
Script UserSerializer

this code script serializer, user_serializer.py in location foot folder access -> serializer

from rest_framework import serializers 
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('id','username','password', 'password2', 'email', 'first_name', 'last_name')
 
 
Class APIView

this file user_list.py in location root folder :access->views

from rest_framework.views import APIView
from rest_framework.response import Response
from django.contrib.auth.models import User
from rest_framework import status
from access.views.pagingku import listpageku, pagingku
from access.seriallizer.user_seriallizer import UserSerializer 
 
 
class AccessListApi(APIView):
    def get(self,request,format=None):
        email =request.GET.get('q')
        nid =request.GET.get('id')
        limit =request.GET.get('limit',10)
        offset =request.GET.get('offset',0)
        user =User.objects.all()
        if email and email !='':
            user = user.filter(Q(email__icontains=email)| Q(username__icontains=email))
        if nid and nid !='':
            user = user.filter(id=nid)
        total = user.count()
        user = pagingku(limit,offset,user)
        listpage = listpageku(offset,total)
        
        serialuser = UserSerializer(user,many=True, context={'request':request})
        return Response({'result':serialuser.data,'total':total,'page':listpage},status=status.HTTP_200_OK)
 
Next
This is the most recent post.
Older Post

0 comments: