Django restframwork实现自定义数据格式的分页与搜索
最近因为在做分页时遇到的问题很多,页浪费了好多时间,所以记录一下。以后如遇到可用省去不必要的麻烦
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实现自定义数据格式的分页与搜索的更多相关文章
- 在django中使用自定义标签实现分页功能
效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...
- 第三百一十四节,Django框架,自定义分页
第三百一十四节,Django框架,自定义分页 自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring impo ...
- 十二 Django框架,自定义分页
自定义分页模块 #!/usr/bin/env python #coding:utf-8 from django.utils.safestring import mark_safe #封装分页类模块 c ...
- Django rest framework(7)----分页
目录 Django rest framework(1)----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Djan ...
- Python学习笔记整理总结【Django】:模板语言、分页、Cookie、Session
一.模板语言 1.在前段展示:对象/字典/元组 class Business(models.Model): # id #用默认的自增id列 即:Business中有3列数据(id, caption, ...
- asp.net mvc 简易通用自定义Pager实现分页
asp.net mvc 自定义Pager实现分页 Intro 一个WEB应用程序中经常会用到数据分页,本文将实现一个简单通用的分页组件,包含一个 PagerModel (用来保存页码信息),一个 Ht ...
- phpcms v9 自定义伪静态的分页函数
因为.这个页面还没做好..等做好了..再给大家演示...... 调用方法:$page_attr=pages_open($num[0]['cun'],$get_page,$max_page,'http: ...
- Django关于设置自定义404和安装debug-toolbar的笔记
Django关于设置自定义404和安装debug-toolbar的笔记 关于设置404 先做好404页面,然后在views.py文件中做好映射,最后是在urls.py做好路由,而这个urls.py必须 ...
- Django restframwork获取列表详情
z哎Django restframwork中就有一个类可以获取列表的详情内容,只有两行代码就可以搞定,在浏览器测试是ok的.但是这样的接口给前端,前端点击详情然后会将models.表名.objects ...
随机推荐
- 考虑下面两个JSP文件代码片断: test1.jsp:
<HTML> <BODY> <% pageContext.setAttribute(”ten”,new Integer(10));%> //1 </BODY& ...
- c/c++学习之c++ 中的list <>容器
http://blog.csdn.net/mazidao2008/article/details/4802617 push 实例化 即添加 http://www.cnblogs.com/BeyondA ...
- 学习:在Eclipse中用TODO标签管理任务(Task)。
1.Windows->Perferences->Java->Compile->Task Tags,我们就可以自定义任务标签,Eclipse中可以支持HIgh,Normal,Lo ...
- HMCharacteristicType 承接homekit 外包开发 微信 ELink9988
承接homekit 开发 微信 ELink9988 让HMCharacteristicTypePowerState:String配件的电源状态.该值是一个布尔值.让HMCharacteristicTy ...
- [转]Oracle dbms_random函数用法快速生成多条测试数据
Java 随机生成中文姓名,手机号,邮编,住址:http://blog.csdn.net/xiaokui_wingfly/article/details/45913885 Java 批量随机生成身份证 ...
- 剑指 offer set 26 不用加减乘除做加法
总结 1. Leetcode 上有一道题, 是不用乘除做乘法, 那道题算是背包问题的变形 2. 不用加减乘除, 还可以用移位操作 3. 将数字转成二进制格式, 然后运用二进制亦或, 移位运算解决 3. ...
- 自记(项目npm)
cnpm install pug pug-cli vuex node-sass sass-loader vue-beauty axios 在main.js里面使用vue-beauty: import ...
- angular4 form 表单中 input输入框的disabled属性
直接加[disabled]="isDisabled"属性的话,出现报错 根据提示,做如下修改 private isEdit: boolean = true; private isD ...
- 设置 SSH Key 登录服务器和 Git 服务器
设置 SSH Key 登录服务器 通过 ssh 登录服务器,一直都是用的账号和密码,今天看到一篇文章说这样不安全,使用 ssh key 的方式登录则是更好的选择,因此,研究实践了一下,并记录在这里. ...
- Hibernate中的映射关系(一对多)
在数据库中表和表之间的关系有几种,(一对一,一对多,多对多)一对一关系:可以选择任意一方插入外键(one-to-one:one-to-one<--->many-to-one[unique= ...