python开发属于什么部门管_我的第一个python web开发框架(37)——职位管理功能...

对于职位管理,我们可以理解它为角色权限的管理,就像前面所说的一样,有了职位管理,后台管理系统绑定好对应的权限以后,新进员工、离职或岗位调整,管理员操作起来就非常的便捷了,只需要重新绑定对应职位就可以做好权限的切换工作。

为了方便职位管理,我们可以将页面设计成下面这个样子

129385-20180906215151345-302946307.png

左边显示部分列表,点击其中一个项后,右边显示对应部门的职位,然后再对职位进行增、改、删等操作

左边我们可以直接使用上一章的部门列表接口,然后将jqGrid前端组件修改一下,只显示名称一列就可以了

然后在前端代码中的jqGrid组件中,增加onSelectRow方法,点击列表项时执行右边列表查询和刷新操作就可以了。

右边需要增加职位列表查询接口,查询时需要提交部门id作为查询条件,具体接口代码如下:

1 @get('/system/positions/')2 defcallback():3 """

4 获取列表数据5 """

6 #部门id

7 department_id = convert_helper.to_int0(web_helper.get_query('department_id', '部门id'))8 #页面索引

9 page_number = convert_helper.to_int1(web_helper.get_query('page', '', is_check_null=False))10 #页面页码与显示记录数量

11 page_size = convert_helper.to_int0(web_helper.get_query('rows', '', is_check_null=False))12 sidx = web_helper.get_query('sidx', '', is_check_null=False)13 sord = web_helper.get_query('sord', '', is_check_null=False)14 #初始化排序字段

15 order_by = 'id asc'

16 ifsidx:17 order_by = sidx + ' ' +sord18

19 _positions_logic =positions_logic.PositionsLogic()20 #读取记录

21 wheres = ''

22 ifdepartment_id:23 wheres = 'department_id=' +str(department_id)24 result = _positions_logic.get_list('*', wheres, page_number, page_size, order_by)25 ifresult:26 #直接输出json

27 returnjson.dumps(result)28 else:29 return web_helper.return_msg(-1, "查询失败")

代码看起来是否感觉很熟悉,和前端列表查询的代码差不多,只是接收参数、查询条件和调用的类不一样而已。所以我们只需要熟悉工具函数、底层ORM方法和调用方法,写起代码来就非常便捷,代码的可读性也大大增强了。

接着我们来处理新增职位操作,新增职位时,需要管理填写的内容只有职位名称,因为所属部门与部门编码在页面中可以直接带过来,另一个操作就是设置访问权限了,这也是我们整个权限管理中最重要的一个环节

129385-20180906222717287-1554256049.png

由上图可以看到,设置访问权限它是一个树列表,它使用的是ztree控件,按它要求的格式,将列表值传给ztree控件就可以自动生成这样的树列表了,然后前端代码通过ztree控件的onCheck方法,获取所有勾选项对应的菜单项id,组合成权限字串提交到接口,更新到数据表中,该职位就拥有了我们所勾选的所有权限了。

对于访问权限树列表的展示,首先,它需要读取菜单列表,输出ztree控件要求的格式;其次,我们在编辑职位权限时,需要对已拥有权限的项自动打上勾,这个我们也可以直接在接口中输出对应的参数来进行设置。

所以我们可以在上一章的menu_info.py文件中,增加下面接口来处理,通过提交过来的职位id,来获取该职位拥有的权限,然后通过逐项判断菜单项与权限的关系,来判断是否打勾。

1 @get('/api/system/menu_info/positions//')2 defcallback(id):3 """

4 根据用户职位权限获取列表数据(树列表),为已有权限的数据赋值5 """

6 _menu_info_logic =menu_info_logic.MenuInfoLogic()7 #读取记录(ztree控件需要输出记录id、父id、树节点名称、节点是否扩开这几项参数)

8 result = _menu_info_logic.get_list('id, parent_id, name, not is_leaf as open, false as checked')9 if result and result.get('rows'):10 #获取指定的职位记录

11 _positions_logic =positions_logic.PositionsLogic()12 positions_logic_model =_positions_logic.get_model_for_cache(id)13 ifpositions_logic_model:14 #读取该职位权限字串

15 page_power = positions_logic_model.get('page_power', '')16 #判断当前菜单项id是否存在于该职位的权限字串中

17 for model inresult.get('rows'):18 #如果存在,则表示当前职位拥有该菜单项的权限,即在菜单权限列表中需要打勾

19 if ',' + str(model.get('id', 0)) + ',' inpage_power:20 model['checked'] =True21

22 return web_helper.return_msg(0, "成功", {'tree_list': result.get('rows')})23 else:24 return web_helper.return_msg(-1, "查询失败")

我们再来看看点击保存后,执行新增职位记录接口代码是怎么实现的

1 @post('/system/positions/')2 defcallback():3 """

4 新增记录5 """

6 name = web_helper.get_form('name', '角色名称')7 department_id = convert_helper.to_int0(web_helper.get_form('department_id', '部门id'))8 page_power = web_helper.get_form('page_power', '权限列表', is_check_null=False)9

10 _department_logic =department_logic.DepartmentLogic()11 #读取对应的部门记录

12 department_result =_department_logic.get_model_for_cache(department_id)13 if notdepartment_result:14 return web_helper.return_msg(-1, "部门不存在")15

16 _positions_logic =positions_logic.PositionsLogic()17 #组合更新字段

18 fields ={19 'name': string(name),20 'department_id': department_id,21 'department_code': string(department_result.get('code', '')),22 'department_name': string(department_result.get('name', '')),23 'page_power': string(page_power),24 }25 #读取记录

26 result =_positions_logic.add_model(fields)27 ifresult:28 #直接输出json

29 return web_helper.return_msg(0, '提交成功')30 else:31 return web_helper.return_msg(-1, "提交失败")

这段代码跟之前的新增也差不多,先是接收提交的参数,然后组合更新字典,再调用提交到数据表。

修改职位权限功能跟上面的类似,不过接口中需要增加一个获取职位记录实体的接口

1 @get('/system/positions//')2 defcallback(id):3 """

4 获取指定记录5 """

6 _positions_logic =positions_logic.PositionsLogic()7 #读取记录

8 result =_positions_logic.get_model_for_cache(id)9 ifresult:10 #直接输出json

11 return web_helper.return_msg(0, '成功', result)12 else:13 return web_helper.return_msg(-1, "查询失败")14

15

16 @put('/system/positions//')17 defcallback(id):18 """

19 修改记录20 """

21 name = web_helper.get_form('name', '角色名称')22 department_id = convert_helper.to_int0(web_helper.get_form('department_id', '部门id'))23 page_power = web_helper.get_form('page_power', '权限列表', is_check_null=False)24 if page_power == ',':25 page_power = ''

26

27 _positions_logic =positions_logic.PositionsLogic()28 positions_result =_positions_logic.get_model_for_cache(id)29 if department_id != positions_result.get('department_id'):30 return web_helper.return_msg(-1, '该角色所属部门错误,请与管理员联系')31

32 #组合更新字段

33 fields ={34 'name': string(name),35 'page_power': string(page_power),36 }37

38 #读取记录

39 result =_positions_logic.edit_model(id, fields)40 ifresult:41 #直接输出json

42 return web_helper.return_msg(0, '提交成功', result)43 else:44 return web_helper.return_msg(-1, "提交失败")

最后是删除接口,我们在执行删除操作时,一定要判断它是否已绑定了管理员账号,不然直接删除后,管理员登录后台系统以后将没有任何权限,无法做任何操作。

1 @delete('/system/positions//')2 defcallback(id):3 """

4 删除指定记录5 """

6 #判断要删除的记录是否被引用,是的话不能删除

7 _manager_logic =manager_logic.ManagerLogic()8 if _manager_logic.exists('positions_id=' +str(id)):9 return web_helper.return_msg(-1, "当前职位已绑定相关管理员,不能直接删除")10

11 #删除记录

12 _positions_logic =positions_logic.PositionsLogic()13 result =_positions_logic.delete_model(id)14 ifresult:15 #直接输出json

16 return web_helper.return_msg(0, '删除成功')17 else:18 return web_helper.return_msg(-1, "删除失败")

最后,大家参照上一章节,在菜单中添加对应的职位管理菜单和控件就可以开始使用了

129385-20180907163723094-1678524291.png

版权声明:本文原创发表于 博客园,作者为

python开发QQ群:669058475(本群已满)、733466321(可以加2群) 作者博客:http://www.cnblogs.com/EmptyFS/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值