分页Pagination
三种分页方式
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' }
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' }
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' }
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' }
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 - 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关系表)