Django REST framework 分页Pagination xadmin的使用 RBAC-基于角色的访问控制

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'
}

Django REST framework
分页Pagination
xadmin的使用
 RBAC-基于角色的访问控制

偏移分页: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'
}

Django REST framework
分页Pagination
xadmin的使用
 RBAC-基于角色的访问控制

游标分页: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'
}

Django REST framework
分页Pagination
xadmin的使用
 RBAC-基于角色的访问控制

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关系表)