1. 程式人生 > >Django restframwork實現自定義數據格式的分頁與搜索

Django restframwork實現自定義數據格式的分頁與搜索

模糊 ces none ota ntp model 簡單的 api ner

最近因為在做分頁時遇到的問題很多,頁浪費了好多時間,所以記錄一下。以後如遇到可用省去不必要的麻煩

restframwork中的官方文檔對分頁和搜索頁進行了詳細的介紹,但是我公司需要的return的json數據格式進行分層。所以吧,一個很簡單的東西,搞的頭皮發嘛,看源碼之類的,費時,重點是看不太懂,但最後還是參考源碼,重寫了response方法。

直接上代碼了

url(r^show_workPublished,views.Show_workPublishedView.as_view(),name=show_workPublished),

serializer.py

class
Show_workPublishedModelSerialiazer(serializers.ModelSerializer): class Meta: model = Upload_filep #fields = ("id","name","title","img") fields = ["id","name","title","img",address,add_time]

自定義分頁pagination.py

from rest_framework.pagination import PageNumberPagination

class PNPageination(PageNumberPagination): page_size = 6 # 每頁顯示2條 page_query_param = currentPage # 當前頁 page_size_query_param = page_size # 每頁顯示

view.py

技術分享圖片
class Show_workPublishedView(generics.ListAPIView):
    queryset = Upload_filep.objects.all().order_by(id).reverse()
    pagination_class 
= PNPageination serializer_class = Show_workPublishedModelSerialiazer #模糊搜索 def get_queryset(self): name = self.request.GET.get(keyword) if name is not None: return self.queryset.filter(Q(name__icontains=name) | Q(title__icontains=name)) return self.queryset def get(self,request,*args,**kwargs): list = self.get_queryset() #list = Upload_filep.objects.all() list_nums = list.count() try: page = request.GET.get(currentPage,1) except PageNotAnInteger: page = 1 limit = int(request.GET.get(limit,6)) p = Paginator(list,limit) lists = p.page(page) #lists_serializer = Show_workPublishedModelSerialiazer(lists,many=True) lists_serializer = self.get_serializer(lists,many=True) ret = { "result": True, "msg": "successful", "secure": False, "returnCode": "200", "data": { "list":{ "listData":lists_serializer.data, "page_size":limit, #每頁顯示兩個 "totalCount":list_nums , # 一共有多少數據 "totalPage": (list_nums//limit if list_nums%limit==0 else list_nums//limit+1) , # 一共有多少頁 a-b if a>b else a+b "currentPage": page , # 當前頁數 }, }, } return Response(ret)
View Code

技術分享圖片

到這裏就能搞定分頁和搜索。restframwork分裝的比較多,但有的東西還是得參考源碼重寫方法。

Django restframwork實現自定義數據格式的分頁與搜索