标签:OLE django 序列化 == 登录 根据 model 实现 modelform
1. 权限基本流程
#用户登录成功后获取权限信息,将【权限和菜单】信息写入到session。 #以后用户在来访问,在中间件中进行权限校验。 #为了提升用户体验友好度,在后台通过inclusion_tag动态生成一个二级菜单。
2. 使用权限
#- 用户登陆:权限和菜单的初始化; init_permission #- 配置中间件 #- 配置白名单 #- 配置session中使用到的key #- load rbac #- menu ,inclusion_tag 生成菜单 #- filter,可以在if后做条件,粒度控制到按钮。
一、问题:
1. 为什么程序需要权限控制?
2. 为什么要开发权限组件?
3. web开发中权限指的是什么?
#一个权限 约等于 URL
二、设计权限系统表结构
第一版设计:
#用户表: #ID Name #权限表: #ID Url #用户权限关系表: #ID 用户ID 权限ID
第二版设计,基于角色的权限控制 rbac (role based access control)
#用户表: #ID Name #角色表 #ID title #用户角色关系表:#ID 用户ID 角色ID #权限表: #ID Url
#角色权限关系表:#ID 角色ID 权限ID
8. 如何在其他系统中应用目前的rbac组件。 #a. 拷贝rbac组件 #b. 清空migrations目录 #c. 注册rbac 到app d. 数据库迁移并录入权限信息 #e. 用户登陆做权限和菜单的初始化 init_permission #f. 应用中间件进行权限校验 #g. 设置配置文件 #h. 显示动态菜单 #j. 粒度控制到按钮
1. 权限有几张表?
2. 简述权限流程?
3. 为什么要把权限放入session?
4. 静态文件和模块文件
5. 相关技术点
#- orm查询 #- 去空 #- 去重 #- 中间件 #- inclusion_tag #- 引入静态文件 #{% load staticfiles %} #{% static ‘....‘ %}
6. 二级菜单时,如何构造的数据结构?
menu_dict = { 1:{ title:‘信息管理‘, icon:‘fa-coffee‘, class:‘‘, children:[ {title:‘客户列表‘,url:‘/customer/list/‘,‘class‘:‘active‘}, ] }, }
11. 问题: 非菜单的权限归属?
12. 问题:层级导航?
13. 粒度控制到按钮?
14. 阶段总结
1. 如何实现的权限系统?
#粒度控制到按钮级别的权限控制 #- 用户登陆成功之后,将权限和菜单信息放入session #- 每次请求时,在中间件中做权限校验 #- inclusion_tag实现的动态菜单
2. 如何实现控制到按钮的呢?
#用户登陆时,用户所拥有的权限 别名==django 路由name 构造成一个字典; #在页面中写了一个 django模板的filter来进行判断是否显示;
3. 为什么要在中间件中做校验呢?
#所有请求在到达视图函数之前,必须经过中间件,所以在中间件中对请求做处理比较简单;
4. 模板中的特殊方法:
#inclusion_tag、simpletag、filter
5. 权限中使用了几张表?
#六张,必须要说出来
6. 表中的字段?(背表)
7. 写流程(思维导读)
8. 如何实现粒度到数据行?
#添加一条更细粒度的表,做条件用;
9. 修改权限之后,如想应用最新权限
#- 我们:需要重新登陆。 #- 不用重新登陆,如何完成?更新涉及的所有用户的session信息
10. 最重要 *****
#- 了解权限系统的流程和实现(一行一行过,根据表结构自己写) 不要抄 #- 权限组件的应用
1. 简述权限管理的实现原理。
2. 表结构
3. 知识点
#- 中间件白名单:配置文件、中间件return None #- 权限初始化: #- left join #- 特殊字典的构造 权限 = { 权限别名:{id:‘‘,title:‘‘,url,pid:‘‘}, 权限别名:{id:‘‘,title:‘‘,url,pid:‘‘}, 权限别名:{id:‘‘,title:‘‘,url,pid:‘‘}, } 菜单 = { 菜单ID:{ title:‘‘, icon:‘‘, children:[ {id:‘1‘,.....} ] } } #- key为数字的字典,在序列化时会变成字符串(*) #- 配置文件 #- 中间件进行权限校验 #- 权限校验 #- 导航路径 #- pid,访问无法成为菜单的权限时,默认展开的父级权限ID #- 动态生成菜单 #- 通过inclusion_tag和两层for循环 + 中间件传来的pid #- 粒度控制到按钮 #- 基于filter并通过 别名 进行权限的判断; #session #orm - 去重 - 去空 #inclusion_tag #filter #有序字典 #settings配置 #引入静态文件 #url别名 #namespace #路由分发 #构造数据结构 #ModelForm #组件应用 #admin #icon爬虫 #mark_safe #下载文件
1. 构造权限结构
def role_test(request): # 问题:从数据库中获取所有的权限 """ { 1:{ ‘title‘:‘账单列表‘, ‘url‘:‘/payment/list/‘, ‘name‘:‘payment_list‘, children:[ {‘title‘:‘删除账单‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, {‘title‘:‘编辑账单‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, {‘title‘:‘添加账单‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, ] }, 2:{ ‘title‘:‘客户列表‘, ‘url‘:‘/payment/list/‘, ‘name‘:‘payment_list‘, children:[ {‘title‘:‘下载客户模板‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, {‘title‘:‘下载客户模板‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, {‘title‘:‘下载客户模板‘,‘url‘:‘/payment/list/‘,‘name‘:‘payment_list‘}, ] } } """
2. 批量操作权限
#集合交集和差集 #批量操作:form_set
1. 构造父子结构
2. 构造家族结构
comment_list = [ {‘id‘:1, ‘title‘:‘写的不错‘, ‘pid‘:None} {‘id‘:2, ‘title‘:‘还不错‘, ‘pid‘:None} {‘id‘:3, ‘title‘:‘什么万一‘, ‘pid‘:1} {‘id‘:4, ‘title‘:‘什么不错‘, ‘pid‘:2} {‘id‘:5, ‘title‘:‘x1‘, ‘pid‘:1}, {‘id‘:6, ‘title‘:‘去你的吧‘, ‘pid‘:3}, {‘id‘:7, ‘title‘:‘去你的吧‘, ‘pid‘:6}, ] comment_list = [ {‘id‘:1, ‘title‘:‘写的不错‘, ‘pid‘:None}, # ,children:[] {‘id‘:2, ‘title‘:‘还不错‘, ‘pid‘:None}, {‘id‘:3, ‘title‘:‘什么万一‘, ‘pid‘:1}, {‘id‘:4, ‘title‘:‘什么不错‘, ‘pid‘:2}, {‘id‘:5, ‘title‘:‘x1‘, ‘pid‘:1}, {‘id‘:6, ‘title‘:‘去你的吧‘, ‘pid‘:3}, {‘id‘:7, ‘title‘:‘去你的吧‘, ‘pid‘:6}, ]
3. formset
#批量表单处理
4. ModelForm也有钩子函数
#注意:如果想要主动显示错误信息,可以使用 add_error(‘字段‘,‘错误信息‘)
5. FK
class Permission(models.Model): """ 权限表 """ title = models.CharField(verbose_name=‘标题‘, max_length=32) url = models.CharField(verbose_name=‘含正则的URL‘, max_length=128) name = models.CharField(verbose_name=‘URL别名‘,max_length=32,null=True,blank=True) parent = models.ForeignKey(verbose_name=‘父权限‘,to=‘Permission‘,null=True,blank=True, limit_choices_to={‘parent__isnull‘:True}) menu = models.ForeignKey(verbose_name=‘菜单‘,to=‘Menu‘,null=True,blank=True)
6. 获取当前项目中所有的URL
7. name
#URL别名: namespace:name #URL别名: name
标签:OLE django 序列化 == 登录 根据 model 实现 modelform
原文地址:https://www.cnblogs.com/chongdongxiaoyu/p/9612857.html