zoukankan      html  css  js  c++  java
  • Django REST framework

    分页Pagination

    REST framework提供了分页的支持。可选分页器有三种

    三种分页方式

    1 三种分页方式
     -基本分页:PageNumberPagination
        page_size = 2  # 每页显示两条
        page_query_param = 'page'  #查询第几页的参数 ?page=3
        max_page_size = 4     #每页最大显示多少条
        page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=3&size=3
        
     -偏移分页:LimitOffsetPagination
        default_limit=2  #默认显示几条
        limit_query_param='limit'   # ?limit=3   表示取3条
        offset_query_param = 'offset' #偏移  ?offset=5&limit=3    #从第5个位置开始,取3条数据
        max_limit = 5   #最多显示5条
        
     -游标分页:CursorPagination
        cursor_query_param = 'cursor' # 查询的key值
        page_size = 2  # # 每页显示两条
        ordering = 'id' # 按id字段排序
        
    2 如何使用
       - APP下创建一个自定义py文件,eg:page.py
       - 在文件中写一个自定义分页类,继承三个之一,并重写类属性
       - 在视图类中配置
        class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
                 queryset = models.Book.objects.all()
             serializer_class = serializer.BookModelSerializer
             # 配置使用的分页类
             pagination_class = CustomNumberPagination
            
        - 局部使用
            pagination_class = CustomNumberPagination
    
        - 全局使用,在配置文件中(以后所有视图的查询所有方法都用这个分页)
            REST_FRAMEWORK = {
         'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
        }

    基本分页:PageNumberPagination

    用的最多的一种

    1、在page.py 中自定义一个类,继承PageNumberPagination,并重写类属性
    from rest_framework.pagination import PageNumberPagination
    
    class CustomNumberPagination(PageNumberPagination):
        page_size = 2  # 每页显示两条
        page_query_param = 'page'  #查询第几页的参数 ?page=3
    
        max_page_size = 4     # 每页最大显示多少条
        page_size_query_param = 'size' #每页显示的条数查询条件(默认是page_size显示的条数) # ?page=2&size=3
        
    2、在views.py 视图类中配置 
    from rest_framework.generics import ListAPIView, CreateAPIView
    from rest_framework.viewsets import ViewSetMixin
    from app01.page import CustomNumberPagination # 导入自定义分页类
    
    class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
        queryset = models.Book.objects.all()
        serializer_class = serializer.BookModelSerializer
        # 配置使用的分页类
        pagination_class = CustomNumberPagination
        
    4、请求方式:(postman中测试)   
        http://127.0.0.1:8000/books/?page=3  # 查第3页
        http://127.0.0.1:8000/books/?page=2&size=3  # 第2页显示3条
        
        
    3、局部使用(视图类中)
        pagination_class = CustomNumberPagination
    
    4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
        REST_FRAMEWORK = {
     'DEFAULT_PAGINATION_CLASS':'app01.page.CustomNumberPagination'
    }

    偏移分页:LimitOffsetPagination

    用的比较少的一种

    1、在page.py 中自定义一个分页类,继承LimitOffsetPagination,并重写类属性
    from rest_framework.pagination import LimitOffsetPagination
    
    class CustomLimitOffsetPagtion(LimitOffsetPagination):
        default_limit=2  #默认显示几条
        limit_query_param='limit'   # ?limit=3   表示取3条
        offset_query_param = 'offset' #偏移  ?offset=5&limit=3    #从第5个位置开始,取3条数据
        max_limit = 5   #最多显示5条
    
        
    2、在views.py 视图类中配置 
    from rest_framework.generics import ListAPIView, CreateAPIView
    from rest_framework.viewsets import ViewSetMixin
    from app01.page import CustomLimitOffsetPagtion # 导入自定义偏移分页类
    
    class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
        queryset = models.Book.objects.all()
        serializer_class = serializer.BookModelSerializer
        # 配置使用的分页类
        pagination_class = CustomLimitOffsetPagtion
        
    4、请求方式:(postman中测试)   
        http://127.0.0.1:8000/books/  # 默认从0开始取2条
        http://127.0.0.1:8000/books/?limit=3&offset=2  # 取3条,从第2条开始
        
    3、局部使用(视图类中)
        pagination_class = CustomLimitOffsetPagtion
    
    4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
        REST_FRAMEWORK = {
     'DEFAULT_PAGINATION_CLASS':'app01.page.CustomLimitOffsetPagtion'
    }

    游标分页:CursorPagination

    基本不用,但针对千万级别的数据,为了降低数据库的压力,建议使用这种

    1、在page.py 中自定义一个分页类,继承CursorPagination,并重写类属性
    from rest_framework.pagination import CursorPagination
    
    class CustomCursorPagination(CursorPagination): # 查询速度最快
        cursor_query_param = 'cursor' # 查询的key值
        page_size = 2  # # 每页显示两条
        ordering = 'id' # 按id字段排序
        
        # 下面两个基本不用无需配置
         # page_size_query_param = None
        # max_page_size = None
        
    2、在views.py 视图类中配置 
    from rest_framework.generics import ListAPIView, CreateAPIView
    from rest_framework.viewsets import ViewSetMixin
    from app01.page import CustomCursorPagination # 导入自定义游标分页类
    
    class BookView(ViewSetMixin,ListAPIView,CreateAPIView):
        queryset = models.Book.objects.all()
        serializer_class = serializer.BookModelSerializer
        # 配置使用的分页类
        pagination_class = CustomCursorPagination
        
    4、请求方式:(postman中测试)   
        http://127.0.0.1:8000/books/?cursor=cD0y   # 按照cursor给的key值查找下一页
        http://127.0.0.1:8000/books/?cursor=cj0xJnA9Mw%3D%3D  # 按照cursor给的key值查找上一页
        
    3、局部使用(视图类中)
        pagination_class = CustomCursorPagination
    
    4、全局使用,在settings.py 配置文件中(以后所有视图的查询所有方法都用这个分页)
        REST_FRAMEWORK = {
     'DEFAULT_PAGINATION_CLASS':'app01.page.CustomCursorPagination'
    }

    xadmin的使用

    1 django后台管理admin
    2 xadmin,美化页面,bootstrap+jq, -django:1.x,2.x -3.x以后就不用了 3 simple-ui 3.x用 4 django是1.x pip3 install xadmin 5 django是2.x pip install git+git://github.com/sshwsfc/xadmin.git@django2 6 碰到一个第三方插件,有些bug -pip3 install 名字:装到解释器中---》下次换了别的解释器,改了源码,又得重新改 -把第三方插件的源码拿出来 -放到自己项目里,想怎么改,就怎么改 7 Xadmin和django的xadmin压根没有联系 -http://x.xuebingsi.com/ -纯前端(html,css,js)后台模板 -跟语言无关 -xadmin和layui的区别 基于layui写的后台管理模板 8 基于bootstrap的后台管理模板 -admin lte 9 前后端分离 -后台模板 -vue-admin

    RBAC-基于角色的访问控制

    RBAC 是基于角色的访问控制(Role-Based Access Control )

    在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

    应用

      RBAC - Role-Based Access Control
      Django的 Auth组件 采用的认证规则就是RBAC

    • 1)像专门做人员权限管理的系统(CRM系统)都是公司内部使用,所以数据量都在10w一下,一般效率要求也不是很高
    • 2)用户量极大的常规项目,会分两种用户:前台用户(三大认证) 和 后台用户(BRAC来管理)

    结论:没有特殊要求的Django项目可以直接采用Auth组件的权限六表,不需要自定义六个表,也不需要断开表关系,单可能需要自定义User表

    前后台权限控制

    • 1)后台用户对各表操作,是后台项目完成的,我们可以直接借助admin后台项目(Django自带的)
    • 2)后期也可以用xadmin框架来做后台用户权限管理
    • 3)前台用户的权限管理如何处理
      •   定义了一堆数据接口的视图类,不同的登录用户是否能访问这些视图类,能就代表有权限,不能就代表无权限
      •   前台用户权限用drf框架的 三大认证

    Django的内置RBAC(六表)

    1 权限3个表
    - 用户表:auth_user
    - 角色表:auth_group
    - 权限表:auth_permission 2 权限6个表(正常是5个表),django的auth,用的就是6表
    - 用户表:auth_user
    - 角色表:auth_group
    - 权限表:auth_permission
    - 角色和权限是多对多:auth_group_permissions (G_P关系表)
    - 用户和角色是多对多:auth_user_groups (U_G关系表) - 用户和权限的多对多表:auth_user_user_permissions (U_P关系表)
    从来就没有正确的选择,我们只不过是要努力奋斗,使当初的选择变得正确。
  • 相关阅读:
    数字精确运算BigDecimal经常用法
    C3P0数据库连接池使用
    Theano学习笔记(四)——导数
    Leetcode--Merge Intervals
    1191 数轴染色
    P1021 邮票面值设计
    P1032 字串变换
    P1294 高手去散步
    P1832 A+B Problem(再升级)
    P1332 血色先锋队
  • 原文地址:https://www.cnblogs.com/gfeng/p/14687385.html
Copyright © 2011-2022 走看看