day78

15qitongxue

xuede 特别渣  性格特别好  每次都回来分享失败的经验,碰到谁就和谁分享
看了基础,去了何人说,回去整个项目再来

面试,要带着项目去。简历上。(这么多年的开发)

提高自我解决问题的能力

没有bug,怎么走
每天备份代码,做好调bug的准备

今日内容:

权限

思维导图的方式整理出来

bug1
'web' is not a registered namespace
return (reverse('web:customer'))	 	没有web 命名空间
bug 2

return render()

一般模板渲染有问题, 一般数据出错了 (前端html)

解决前端 : 把web: 都替换了

rbac/distribute/permissions/?uid=2

给用户分配不同的角色
分配权限

用户信息   角色不同了  他的权限也跟着变(角色已有的权限)(点击保存)

分配权限

给角色分配不同的权限
点击BOSS(背景颜色变了)  所有权限都出来了 ,可以修改,保存

三级菜单

distribute_permissions

去改成数据结构 chlidren (写的非常复杂,不会前端,for循环里有数据联动)

distribute_permissions 2

用户uid

访问的时候没有保存 if uid ---》 有了保存

<a href="?uid={{ user.id }}">{{ user.name }}</a></li>
角色rid

直接就改了私有变量

_开头私有变量 (python中可以改,告诉别人是私有变量)

 <td><a href="?{% gen_role_url request role.id %}">{{ role.name }}</a></td>


    params = request.GET.copy()      deepcopy也是这么改 _deepcopy 有mutable方法
    params._mutable = True		下划线是私有变量  可以修改了=true
    params['rid'] = rid			
    return params.urlencode()		编码 拼接字符串 rid = role.id	rid=1
    答辩如何答辩					{‘name’:'chao','xx':111} name=chao&xx=11
    三个人站台上,全班提问			
    
    request.get  在url =  ? 的时候才会拿到值
    
    
    if 判断  把用户已有的角色 勾选上  
    用户分配角色  rid 

<a href="?

权限

前端只负责给后端要数据,后端只给前端数据,怎么渲染不管				
ajax做的 权限		
res是数据	返回的是		


parent = Fk('Permision')(和self ) 也行 关联自己 pid	

weight 权重 排序的

list(permissions) json反序列化下的 列表套字典 safe=False (字典没错,别的要falseyixia )

jsonResponse(contype是json的,调用内部解析器,解析成内部的数据结构了)

$.each(循环) (i(索引),permission({'x1':xx},{'x2':xxx}))

组织数据 val [ermission]

import copy
request.GET.copy()   		copy方法
copy.copy(request.GET)		__copy__
			

ES6 新增的模板语法

var s=''多行语法

‘menu_${menu_pk}’   id = 'menu_1'   

json在线格式化

pid = none 父级
s = 'tr 一级菜单  tr 二级菜单'
input name = 'per_id' value={{pk}} 

$(#body).append(s)

数据 一次循环两级菜单

这样显示格式是可以的,渲染的不同

if (menu_title): tr tr

else : tr (tr (td td td))

根据per_${pk} #per_+parent_id append

![上一次pk 后一次根据per_append](E:Downloadqq_download eacher_huatu_downloads20pyDjangoday78上一次pk 后一次根据per_append.png)

如果同处一个menu_id 的情况下,会生成,两个 信息管理 信息管理

所以给个if 条件 判断一级菜单是否生成了

if (#menu+menu_pk).length(或者不加length) : s = 'td'

$ (#menu+menu_pk).parent().append(s) 一级标签加

流程:

刚开始没有uid 没有rid 只有两条数据 和 权限的数据

if uid : vlaue_list = [(1,),(2,)] -->[1,2]

​ p_id_list = 权限有重复的 [1,2 ] 给了权限的ajax

​ --->permission2.html,role_id_list p_id_list

默认勾选

a 标签发了get请求 给了 渲染的成rid 渲染的p_id

​ if role.id in role_list : checked 模板的时候做

ajax模板渲染之后 发送的ajax ---》per_tree (发送了jsR)

拿到数据,生成标签,加到对应的页面位置

ajax var p_id_list = {{per_id_list}}

找到 value = pk 和 in p_id_list 一样的 给他加个checked

$.each(p_i_l,func(i,j){
	
})

有个ajax局部刷 ,点击user 或者 role 的话刷新

{% if role.id in role_id_list %}	//[1,2,3,4]
   <input type="checkbox" name="roles" value="{{ role.id }}" checked/>
 		  {% else %}
   <input  type="checkbox" name="roles" value="{{ role.id }}"/>
    {% endif %}
 url: 'tree'
 var per_id_list={{ per_id_list }}   //[1,2,3,4]
$.each(per_id_list,function(i,j){		
    console.log($("[value='"+j+"']")[0])	
    $("#body [value='"+j+"']").prop("checked",true)
})

input生成标签的时候vlaue 是{{pk}} 值   默认值
3 简单版本

简单版本

保存提交

用户的角色(自带权限)分配

user uid = 1

input name = 'postType' value = 'role' 就一个保存提交判断 是role 还是perssion

if method = 'post' and request.POST .get('postType') =='role':

l = request.getlist('roles')

user.first().roles.set(l) 基于对象的多表操作 对象.

roles 操作第三张表 set()先清空在赋值

user_list = 再查一遍 然后再渲染回去

role_list

给角色分配权限

自定义标签 + rid = 1 ? gen_role_

uid=1 & rid = 1 boss

rid request.GET.get('rid')

之前的是 p_id_list = user.pk=uid

现在应该是

else rid : p_id_list = models.Role.obj.filter('perssins__pk'=id).cla正向

if uid: p_id_list = models.user.obj.filter('perssins__pk'=id).cla

input name = 'postType' value = 'permission'

if re.method ="POST" and value = 'P':

​ l= request.POST.getlist('permission_id')

​ models.Role.objects.filter(pk=rid).first()取出对象.permissin.set(l)

r除了权限之外都是增删改查,但是业务要给人说,吹 
总流程

两个bug

第一个点击消失,二级菜单	if 路径
第二个增删改查,点击消失    if pid


权限加到项目

1 settings 权限相关配置加到自己项目配置中

2 权限中间件更改一下,配置一下 (权限都写在rbac中,)(出现什么bug,心里有数)

​ (有一些功能对不上的,按着流程一步步揪)

3 白名单 ,登录

4 登录---表里面有没有这些数据--提取数据,session中 注入permission_list , [{'pid','title','url','pk'}]

5 登录认证,权限认证 request.session['permission_list'] request.path

6 url-视图-模板

7 模板渲染,左侧菜单栏权限(走到页面展示(流程图))

8 不同的客户对应不同的操作

9 权限管理 (角色的增删改查 权限的增删改查)

nbcrm

setting 给了 rbac.

setting 配置一下 white .setting.confire = ['','','','']

注意 : 路径分配

rbac 有个user表

nbapp 有个user表

from nbapp.models import UserInfo

class User(models.Model):

​ user = models.onttoonefield('nbapp.userinfo') 对应好了

查询的时候:

​ login 登录成功之后注入权限:

​ if user_obj :

​ 用的是rbac 表里的对象 而不是nbapp

​ init_session(request,) rbac里的关联的用户表

原文地址:https://www.cnblogs.com/Doner/p/11063951.html