Rest Framework第五天-版本控制、响应器和渲染器、分页

频率:
    自定义:
        1 定义一个类MyThrottles
            allow_request(频率限制的逻辑)
            wait(返回一个数字,给用户提示,还差多少秒)
        2 局部使用:throttle_classes=[MyThrottles,]
        3 全局使用:'DEFAULT_THROTTLE_CLASSES':['utils.common.MyThrottles',],
    用内置的:(可以控制ip,和userid)
        1 写一个类,继承SimpleRateThrottle
            属性:scope = 'xxx'
            重写方法:get_cache_key
            去setting里配置:'DEFAULT_THROTTLE_RATES':{
                                # 'xxx':'5/m',
                                'xxx':'5/m',
                            }        
        2 局部使用:throttle_classes=[MyThrottles,]
        3 全局使用:'DEFAULT_THROTTLE_CLASSES':['utils.common.MyThrottles',],
补充:
    认证,想局部取消(禁用)
    authentication_classes=[]
版本控制:
    1 127.0.0.1/course/?version=v100000
      用from rest_framework.versioning import QueryParameterVersioning
      在视图类里:
        versioning_class=QueryParameterVersioning(**不再是列表)
      在setting里配置:
        REST_FRAMEWORK={
            'VERSION_PARAM':'version',
            'DEFAULT_VERSION':'v2',
            'ALLOWED_VERSIONS':['v1','v2']
        }
      取:
            视图类里:
            request.version
    
    127.0.0.1/v1/course/
          用from rest_framework.versioning import URLPathVersioning
          在视图类里:
            versioning_class=URLPathVersioning(**不再是列表)
          在setting里配置:
            REST_FRAMEWORK={
                'VERSION_PARAM':'version',
                'DEFAULT_VERSION':'v2',
                'ALLOWED_VERSIONS':['v1','v2']
            }
          取:
            视图类里:
            request.version

    3 反向解析(了解)
响应器:
    以后项目中用:(返回的格式,只是json格式)
        REST_FRAMEWORK={
            'DEFAULT_RENDERER_CLASSES':['rest_framework.renderers.JSONRenderer',],
        }
    补充一点:
        查找模板的时候:先从自己app里找,找不取项目,再找不到,取各个app里找
 
分页:
    1 简单分页
        127.0.0.1/course/page=3
        PageNumberPagination
            #每页显示多少条api_settings.PAGE_SIZE
            #page_size =
            #查询指定页码的参数
            #page_query_param = 'page'
            #指定每页显示条数
            #page_size_query_param = None
            #限制每页显示最大条数
            #max_page_size = None
        
    2 偏移分页
        127.0.0.1/course/offset=10&limit=5
        LimitOffsetPagination
            #         default_limit:默认显示多少条
            #         max_limit:最大显示多少条
            #         limit_query_param:重新命名limit(limit=4:表明显示四条,受max_limit的限制)
            #         offset_query_param:指定查询的标杆名(offset=1:表明从第二条开始,往后偏移)
    3 加密分页
        后台返回的url:127.0.0.1/course/page=dfgeg
            CursorPagination
                cursor_query_param = 'cursor':查询的名字
                page_size = api_settings.PAGE_SIZE:每页显示的条数
                ordering = '-created'  :按谁排序
                
    补充:(1)修改数据属性的方式:
            1 再setting里配置每页条数
            2 写一个类,继承它,属性重写
            3 再对象里修改
        (2)my_page.get_paginated_response(ser.data)
             # 对Response做了封装,返回内容里有总条数,上一页,下一页的链接
     
自己封装response对象
    。。。。

猜你喜欢

转载自blog.csdn.net/qq_17513503/article/details/83350938