博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
drf分页器,url控制器,解析器,响应器
阅读量:6963 次
发布时间:2019-06-27

本文共 5539 字,大约阅读时间需要 18 分钟。

认证:

  类继承BaseAuthentication,重写authenticate方法:

  认证通过返回两个参数(当前用户,token),从request.user(request._user),request.auth(request.auth)获取

  认证失败抛出异常(Authenticaefailed(继承exception))

  局部使用:在类名下设置(authenticate_classes=[Myauthenticaeio,])

  全局使用:配置文件中设置,局部禁用,在类名下设置参数为空列表

权限:

  类继承BasePermission,重写has_permission方法;

  认证通过返回rtue

  认证失败返回False

  局部禁用:同上

  全局使用:同上

频率:

  类继承SimpleRateThrottle

  类中设置参数:scope="sb"

  重写get_cache_key方法

  def get_cache_key(self,request,view):

    return request.META.get('REMOT_ADDR')(ip地址)(返回的值为有辨识度的参数用于区分)

  在settings中配置

  'DEFAULT_THROTTLE_RATES':{'sb':'10/minute'}

  局部使用:同上:

  全局使用:同上

分页器

1.简单分页(查看第n页,每页显示m条)

使用方法:导入PageNumberPagination类

实例化产生对象,

page_pagination = PageNumberPagination()

需要配置四个参数

page_size,page_query_param,page_size_query_param,max_page_size

page_size必须指定:在settings中指定或直接赋值

调用方法,返回数据

sb = page_pagination.paginate_queryset(book_list,request,self)

序列化,返回的数据

类中需要掌握的属性:

page_size:控制每页显示条数

page_query_param:控制查询第几页的查询参数,比如page_query_param='sb'

http://127.0.0.1:8000/boooks/?sb=2表示查询第二页数据

page_size_query_param:控制每页最大显示的条数

比如page_pagination.page_size_query_param='max'

http://127.0.0.1:8000/books/?sb=2&max=8

表示查询第二页的数据,每页显示八条(且第一页同时也是八条)

max_page_size:控制每页最大显示的条数

比如:page_pagination.max_page_size=7

http://127.0.0.1:8000/books/?max=1000最多显示7条

优先级分别为page_size_query_param>page_size  (当page_size_query_param大于max_page_size时,后方为准)

1 from rest_framework.pagination import PageNumberPagination 2 # 一 基本使用:url=url=http://127.0.0.1:8000/pager/?page=2&size=3,size无效 3 class  Pager(APIView): 4     def get(self,request,*args,**kwargs): 5         # 获取所有数据 6         ret=models.Book.objects.all() 7         # 创建分页对象 8         page=PageNumberPagination() 9         # 在数据库中获取分页的数据10         page_list=page.paginate_queryset(ret,request,view=self)11         # 对分页进行序列化12         ser=BookSerializer1(instance=page_list,many=True)13         return Response(ser.data)14 # 二 自定制 url=http://127.0.0.1:8000/pager/?page=2&size=315 # size=30,无效,最多5条16 class Mypage(PageNumberPagination):17     page_size = 218     page_query_param = 'page'19     # 定制传参20     page_size_query_param = 'size'21     # 最大一页的数据22     max_page_size = 523 class  Pager(APIView):24     def get(self,request,*args,**kwargs):25         # 获取所有数据26         ret=models.Book.objects.all()27         # 创建分页对象28         page=Mypage()29         # 在数据库中获取分页的数据30         page_list=page.paginate_queryset(ret,request,view=self)31         # 对分页进行序列化32         ser=BookSerializer1(instance=page_list,many=True)33         # return Response(ser.data)34         # 这个也是返回Response对象,但是比基本的多了上一页,下一页,和总数据条数(了解即可)35         return page.get_paginated_response(ser.data)36 37 复制代码38 setting里39 40 REST_FRAMEWORK = {41     # 每页显示两条42     'PAGE_SIZE':243 }44  路由:45 46 url(r'^pager/$', views.Pager.as_view()),47  Serializers48 49 class BookSerializer1(serializers.ModelSerializer):50     class Meta:51         model=models.Book52         # fields="__all__"53         exclude=('authors',)
简单分页实例

 

2.偏移分页(在第n个位置,向后查看n条数据)

使用方式:同简单分页

重要参数:

default_limit:默认每条显示的条数,默认偏移的数量

http://127.0.0.1:8000/books/就会显示5条数据

limit_query_param:向后偏移多少条

就用默认值:limit

offset_query_param:标杆值

limit_query_param+offset_query_param联合使用:

http://127.0.0.1:8000/books/?limit=1&offset=5

表示以数据第五条为基准,往后查询一条数据

max_limit:最大偏移的条数(最大取出的条数)

1 复制代码 2 # http://127.0.0.1:8000/pager/?offset=4&limit=3 3 from rest_framework.pagination import LimitOffsetPagination 4 # 也可以自定制,同简单分页 5 class  Pager(APIView): 6     def get(self,request,*args,**kwargs): 7         # 获取所有数据 8         ret=models.Book.objects.all() 9         # 创建分页对象10         page=LimitOffsetPagination()11         # 在数据库中获取分页的数据12         page_list=page.paginate_queryset(ret,request,view=self)13         # 对分页进行序列化14         ser=BookSerializer1(instance=page_list,many=True)15         # return page.get_paginated_response(ser.data)16         return Response(ser.data)
偏移分页

 

3.CursorPagination(加密分页,只能查看上一页和下一页),速度快

重要参数:

page_size:每页显示的条数

cursor_query_param:不需要动

ordering:按什么排序

通过get_paginated_response返回结果中上一页和下一页的链接地址

page_pagination.get_paginated_response(book_ser.data)

方法的用法

响应器:(不需要改)

响应返回的页面,数据的格式是不同的

局部使用:

在视图类中配置:

renderer_classes=[JSONRenderer,BrowerableAPIRenderer]

全局使用:在settings中配置:

'DEFAULT_RENDERER_CLASSES':('rest_framework.renderers.JSONRenderer','rest_framework.renderers.BrowsableAPIRenderer',),

1 from rest_framework.pagination import CursorPagination 2 # 看源码,是通过sql查询,大于id和小于id 3 class  Pager(APIView): 4     def get(self,request,*args,**kwargs): 5         # 获取所有数据 6         ret=models.Book.objects.all() 7         # 创建分页对象 8         page=CursorPagination() 9         page.ordering='nid'10         # 在数据库中获取分页的数据11         page_list=page.paginate_queryset(ret,request,view=self)12         # 对分页进行序列化13         ser=BookSerializer1(instance=page_list,many=True)14         # 可以避免页码被猜到15         return page.get_paginated_response(ser.data)
加密分页

 

url控制器

自动生成路由:

在url.py中:

from rest_framework  import routers

生成一个router对象

router = routers.DefaultRouter()

两个参数,一个是匹配的路由,一个是视图类中写的CBV的类

router.register('books',views.BooksView)

urlpatterns=[url(r'',include(router.urls))]

 

解析器:

作用:能够解析前传递的数据格式:urlencode,formdata,json格式

默认情况下,解析所有格式,内置了三种解析器

from rest_framework,parsers import JSONParser

from rest_framework.parsers import FormParser

from rest_framework,parsers import MultiPartParser

解析器的局部使用

在视图类中配置:

parser_classes=[JSONParser]

全局使用:

在settings中

'DEFAULT_PARSER_CLASSES':('rest_framework.parsers.JSONParser',

'rest_framework.parsersFormParser',

'rest_framework.parsers.MultiPartParser')

转载于:https://www.cnblogs.com/suncunxu/p/10626846.html

你可能感兴趣的文章
Discuz 7.2坑爹集锦-PHP篇 update 20120525
查看>>
IDEA 2016.3 导入项目
查看>>
spring4+hibernate4+struts2注解,class找不到bean
查看>>
java中synchronized和Lock的区别
查看>>
python练习-数值比较
查看>>
win7,centos双系统无法启动centos,跳到grub命令行
查看>>
我的友情链接
查看>>
堆和栈的区别
查看>>
MongoDB基本命令用法
查看>>
MongoDB基本命令用法
查看>>
Docker的四种网络方式
查看>>
【Qt笔记】可视化显示数据库数据
查看>>
Spring Boot 2.0正式发布,升还是不升呢?
查看>>
Android四大组件Activity,及Intent的简单用法
查看>>
线程同步控制
查看>>
正则表达式
查看>>
深入理解Tomcat系列之一:系统架构
查看>>
[原]Jenkins(八)---jenkins构建项目报错时发送错误报告邮件
查看>>
Smart Framework:轻量级 Java Web 框架
查看>>
在win10中使用linux上的bash命令行
查看>>