最近因为在做分页时遇到的问题很多,页浪费了好多时间,所以记录一下。以后如遇到可用省去不必要的麻烦

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": "", "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)

到这里就能搞定分页和搜索。restframwork分装的比较多,但有的东西还是得参考源码重写方法。

Django restframwork实现自定义数据格式的分页与搜索的更多相关文章

  1. 在django中使用自定义标签实现分页功能

    效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...

  2. 第三百一十四节,Django框架,自定义分页

    第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...

  3. 十二 Django框架,自定义分页

    自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...

  4. Django rest framework(7)----分页

    目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...

  5. Python学习笔记整理总结【Django】:模板语言、分页、Cookie、Session

    一.模板语言  1.在前段展示:对象/字典/元组 class Business(models.Model): # id #用默认的自增id列 即:Business中有3列数据(id, caption, ...

  6. asp.net mvc 简易通用自定义Pager实现分页

    asp.net mvc 自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 Ht ...

  7. phpcms v9 自定义伪静态的分页函数

    因为.这个页面还没做好..等做好了..再给大家演示...... 调用方法:$page_attr=pages_open($num[0]['cun'],$get_page,$max_page,'http: ...

  8. Django关于设置自定义404和安装debug-toolbar的笔记

    Django关于设置自定义404和安装debug-toolbar的笔记 关于设置404 先做好404页面,然后在views.py文件中做好映射,最后是在urls.py做好路由,而这个urls.py必须 ...

  9. Django restframwork获取列表详情

    z哎Django restframwork中就有一个类可以获取列表的详情内容,只有两行代码就可以搞定,在浏览器测试是ok的.但是这样的接口给前端,前端点击详情然后会将models.表名.objects ...

随机推荐

  1. @Bean 小知识

    先说结论 @Bean 可以用在任意方法上. -- 也可以用在注解上面. @Bean 仅在Spring创建bean时起作用. 这应该算一个小技巧,在一个平常类(非@Configuration class ...

  2. 【BZOJ】1660: [Usaco2006 Nov]Bad Hair Day 乱发节(单调栈)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1660 单调栈裸题..累计比每一个点高的个数即可. #include <cstdio> # ...

  3. 小谈js原型链和继承

    原型(prototype)在js中可是担当着举足轻重的作用,原型的实现则是在原型链的基础上,理解原型链的原理后,对原型的使用会更加自如,也能体会到js语言的魅力. 本文章会涉及的内容 原型及原型对象 ...

  4. Struts2_day03--OGNL的#、%使用

    OGNL的#.%使用 #使用 1 使用#获取context里面数据 2 演示# 操作 (1)向request域放值 (2)在页面中使用ognl获取 %使用 1 在struts2标签中表单标签 (1)在 ...

  5. iOS开发之--如何使用自定义字体

    一.首先把字体导入到工程中 二.选择Build Phases -->Copy Boundle Resources ,把所用的字体添加进去,一般x-code会自定导入 三.在info.plist中 ...

  6. [UIImage _isCached]: message sent to deallocated instance

    本文转载至 http://zhuhaibobb.blog.163.com/blog/static/2744006720124191633375/       这几天做了个APP打开20份钟左右就强制退 ...

  7. $("#btn").click(function(){ });只有在页面加载的时候才会有效触发

    例: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title& ...

  8. json学习之JSONArray的应用(转载)

    从json数组中得到相应java数组,如果要获取java数组中的元素,只需要遍历该数组. 1 /** 2 * 从json数组中得到相应java数组 3 * JSONArray下的toArray()方法 ...

  9. ajax请求加全局loading , 个别特殊请求不显示loading

    项目中,请求开始前加载loading遮罩层,请求结束关闭遮罩,一般都会加在全局中,但有个别请求不需要加全局loading 的话,这时候就需要对这些请求进行配置 全局加loading: ; functi ...

  10. ERROR in [copy-webpack-plugin] unable to locate "D:/xxx/xxx/xxx"

    vue打包的时候npm run build报错 ERROR in [copy-webpack-plugin] unable to locate "D:/xxx/xxx/xxx" 这 ...