我的第一个python web开发框架(38)——管理员管理功能
后台管理员的管理功能,它主要用来管理后台的登录账号,绑定权限,当然如果想将后台管理扩展成企业相关管理系统,比如用于公司人事管理,在这个基础上进行适当扩展就可以了。
我们先看看界面效果(也可以看着数据字典来写页面和接口)
看起来功能项还是不少,管理员也可以直接改为员工管理。列表没有什么特别的地方,所以接口也比较简单,不详细讲解。当然你也可以在这个基础上增加一下按姓名、手机、账号、部门和职位等查询条件上去
1 @get('/api/system/manager/') 2 def callback(): 3 """ 4 获取列表数据 5 """ 6 # 页面索引 7 page_number = convert_helper.to_int1(web_helper.get_query('page', '', is_check_null=False)) 8 # 页面页码与显示记录数量 9 page_size = convert_helper.to_int0(web_helper.get_query('rows', '', is_check_null=False)) 10 sidx = web_helper.get_query('sidx', '', is_check_null=False) 11 sord = web_helper.get_query('sord', '', is_check_null=False) 12 # 初始化排序字段 13 order_by = 'id asc' 14 if sidx: 15 order_by = sidx + ' ' + sord 16 17 _manager_logic = manager_logic.ManagerLogic() 18 # 读取记录 19 result = _manager_logic.get_list('*', '', page_number, page_size, order_by) 20 if result: 21 return json.dumps(result, cls=json_helper.CJsonEncoder) 22 else: 23 return web_helper.return_msg(-1, "查询失败")
由于在设计管理员数据表时,字段也有不少,所以我们在管理新增与编辑页面上,可以改为标签分类方式查看,这样会比较容易找到自己想要的东西,而不是全部罗列下来一大堆
我们将管理员信息分为基本信息、权限信息和账户安全设置三类,这样看起来会清晰很多。
在新增与编辑页面,由于我们的管理员权限需要绑定部门与职位,所以页面上需要增加部门树列表获取与职位列表获取接口的访问,在添加菜单时大家也要记得将这两个调用接口加上,不然等底层权限加上以后,这些页面数据都获取不了。
1 @get('/api/system/manager/<id:int>/') 2 def callback(id): 3 """ 4 获取指定记录 5 """ 6 _manager_logic = manager_logic.ManagerLogic() 7 # 读取记录 8 result = _manager_logic.get_model_for_cache(id) 9 if result: 10 return web_helper.return_msg(0, '成功', result) 11 else: 12 return web_helper.return_msg(-1, "查询失败") 13 14 15 @post('/api/system/manager/') 16 def callback(): 17 """ 18 新增记录 19 """ 20 name = web_helper.get_form('name', '管理员名称') 21 sex = web_helper.get_form('sex', '性别', is_check_null=False) 22 if sex != '男': 23 sex = '女' 24 mobile = web_helper.get_form('mobile', '手机号码', is_check_null=False) 25 if mobile and not string_helper.is_mobile(mobile): 26 return web_helper.return_msg(-1, '手机号码格式不正确') 27 birthday = web_helper.get_form('birthday', '出生日期', is_check_null=False) 28 if birthday: 29 birthday = convert_helper.to_date(birthday) 30 email = web_helper.get_form('email', 'email', is_check_null=False) 31 if email and not string_helper.is_email(email): 32 return web_helper.return_msg(-1, 'Email格式不正确') 33 remark = web_helper.get_form('remark', '备注', is_check_null=False) 34 department_id = convert_helper.to_int0(web_helper.get_form('department_id', '所属部门')) 35 positions_id = convert_helper.to_int0(web_helper.get_form('positions_id', '所属职位')) 36 is_work = convert_helper.to_int0(web_helper.get_form('is_work', '工作状态')) 37 is_enabled = web_helper.get_form('is_enabled', '是否启用', is_check_null=False) 38 login_name = web_helper.get_form('login_name', '登录账号') 39 login_password = web_helper.get_form('login_password1', '登录密码', is_check_special_char=False) 40 if len(login_password) < 6: 41 return web_helper.return_msg(-1, '登录密码长度必须大于等于6位') 42 login_password = encrypt_helper.md5(encrypt_helper.md5(login_password)[2:24]) 43 44 # 判断提交的部门id是否正确 45 _department_logic = department_logic.DepartmentLogic() 46 department_result = _department_logic.get_model_for_cache(department_id) 47 if not department_result: 48 return web_helper.return_msg(-1, '所属部门不存在') 49 # 判断提交的职位id是否正确 50 _positions_logic = positions_logic.PositionsLogic() 51 positions_result = _positions_logic.get_model_for_cache(positions_id) 52 if not positions_result or positions_result.get('department_id') != department_id: 53 return web_helper.return_msg(-1, '所属职位不存在') 54 55 _manager_logic = manager_logic.ManagerLogic() 56 # 组合更新字段 57 fields = { 58 'name': string(name), 59 'sex': string(sex), 60 'mobile': string(mobile), 61 'email': string(email), 62 'remark': string(remark), 63 'department_id': department_id, 64 'department_code': string(department_result.get('code', '')), 65 'department_name': string(department_result.get('name', '')), 66 'positions_id': positions_id, 67 'positions_name': string(positions_result.get('name', '')), 68 'is_work': is_work, 69 'is_enabled': is_enabled, 70 'login_name': string(login_name), 71 'login_password': string(login_password), 72 } 73 if birthday: 74 fields['birthday'] = string(str(birthday)) 75 # 添加记录 76 result = _manager_logic.add_model(fields) 77 if result: 78 return web_helper.return_msg(0, '成功') 79 else: 80 return web_helper.return_msg(-1, "提交失败") 81 82 83 @put('/api/system/manager/<id:int>/') 84 def callback(id): 85 """ 86 修改记录 87 """ 88 name = web_helper.get_form('name', '管理员名称') 89 sex = web_helper.get_form('sex', '性别', is_check_null=False) 90 if sex != '男': 91 sex = '女' 92 mobile = web_helper.get_form('mobile', '手机号码', is_check_null=False) 93 if mobile and not string_helper.is_mobile(mobile): 94 return web_helper.return_msg(-1, '手机号码格式不正确') 95 birthday = web_helper.get_form('birthday', '出生日期', is_check_null=False) 96 if birthday: 97 birthday = convert_helper.to_date(birthday) 98 email = web_helper.get_form('email', 'email', is_check_null=False) 99 if email and not string_helper.is_email(email): 100 return web_helper.return_msg(-1, 'Email格式不正确') 101 remark = web_helper.get_form('remark', '备注', is_check_null=False) 102 department_id = convert_helper.to_int0(web_helper.get_form('department_id', '所属部门')) 103 positions_id = convert_helper.to_int0(web_helper.get_form('positions_id', '所属职位')) 104 is_work = web_helper.get_form('is_work', '工作状态') 105 is_enabled = web_helper.get_form('is_enabled', '是否启用', is_check_null=False) 106 login_name = web_helper.get_form('login_name', '登录账号') 107 login_password1 = web_helper.get_form('login_password1', '新密码', is_check_null=False, is_check_special_char=False) 108 # 判断用户是否修改密码 109 if login_password1: 110 if len(login_password1) < 6: 111 return web_helper.return_msg(-1, '新密码长度必须大于等于6位') 112 login_password1 = encrypt_helper.md5(encrypt_helper.md5(login_password1)[2:24]) 113 114 # 判断提交的部门id是否正确 115 _department_logic = department_logic.DepartmentLogic() 116 department_result = _department_logic.get_model_for_cache(department_id) 117 if not department_result: 118 return web_helper.return_msg(-1, '所属部门不存在') 119 # 判断提交的职位id是否正确 120 _positions_logic = positions_logic.PositionsLogic() 121 positions_result = _positions_logic.get_model_for_cache(positions_id) 122 if not positions_result or positions_result.get('department_id') != department_id: 123 return web_helper.return_msg(-1, '所属职位不存在') 124 125 _manager_logic = manager_logic.ManagerLogic() 126 result = _manager_logic.get_model_for_cache(id) 127 if not result: 128 return web_helper.return_msg(-1, '管理员账号不存在') 129 130 # 组合更新字段 131 fields = { 132 'name': string(name), 133 'sex': string(sex), 134 'mobile': string(mobile), 135 'email': string(email), 136 'remark': string(remark), 137 'department_id': department_id, 138 'department_code': string(department_result.get('code', '')), 139 'department_name': string(department_result.get('name', '')), 140 'positions_id': positions_id, 141 'positions_name': string(positions_result.get('name', '')), 142 'is_work': is_work, 143 'is_enabled': is_enabled, 144 'login_name': string(login_name), 145 } 146 if birthday: 147 fields['birthday'] = string(str(birthday)) 148 if login_password1: 149 fields['login_password'] = string(login_password1) 150 # 修改记录 151 result = _manager_logic.edit_model(id, fields) 152 if result: 153 return web_helper.return_msg(0, '成功', result) 154 else: 155 return web_helper.return_msg(-1, "提交失败")
这里有三个接口,第一个是管理员记录实体获取接口,用于编辑管理员时,要先从接口读取管理员的相关信息。
第二个是新增管理员接口,代码看起来很多,其实有一半是处理AJAX提交上来的数据的,大家如果熟悉common工具函数的话,会觉得这些代码非常熟悉,可以直接阅读,当然如果你对工具函数不熟的话,看起来可能会有点蒙,所以说要学好一个陌生框架,最好先熟悉它的工具函数有什么功能。前面让大家一定要反复使用单元测试和手打代码,就是让大家能更容易熟悉这些函数,在后面查看代码时一点都不会吃力。
第三个是编辑管理员信息接口,代码同新增接口只有很小的差别。
然后是删除接口,在删除管理员时,我们需要做个限制,判断它是否在职,在职的不能直接删除,以避免误操作。对于管理员账号,如果离职了,最好不要删除,可以留着有需要时查询,当然如果离职员工很多,相关人员又有强迫症不想查看到的话,可以将管理员管理分为两部分(两个单独的页面),一个是在职员工管理,一个是离职页面管理。
1 @delete('/api/system/manager/<id:int>/') 2 def callback(id): 3 """ 4 删除指定记录 5 """ 6 _manager_logic = manager_logic.ManagerLogic() 7 # 删除记录 8 result = _manager_logic.get_model_for_cache(id) 9 if result: 10 # 未离职管理员不能直接删除 11 if result.get('is_work') == 1: 12 return web_helper.return_msg(-1, '未离职管理员不能直接删除') 13 14 result = _manager_logic.delete_model(id) 15 if result: 16 return web_helper.return_msg(0, '删除成功') 17 18 return web_helper.return_msg(-1, "删除失败")
除了增改删之外,对于管理员来说还会存在离职和复职的情况,所以我们还需要这两个接口,它们相对来说比较简单,离职就是将管理员的账号状态和工作状态都设置为false,复职就将它们改为true就可以了
可能有人会问,为什么还要增加工作状态和账号状态,用一个来管理不就可以了。如果后台管理系统做的简单的话,一个账号状态就够用了,如果将它拿来管理员工的话,有可能会出现有的员工在职中,但不给它登录系统,所以就需要两个不同的状态来进行管理。
1 @put('/api/system/manager/<id:int>/dimission/') 2 def callback(id): 3 """ 4 设置用户离职 5 """ 6 _manager_logic = manager_logic.ManagerLogic() 7 fields = { 8 'is_work': False, 9 'is_enabled': False, 10 } 11 # 读取记录 12 result = _manager_logic.edit_model(id, fields) 13 if result: 14 return web_helper.return_msg(0, '成功') 15 else: 16 return web_helper.return_msg(-1, "管理员不存在") 17 18 19 @put('/api/system/manager/<id:int>/reinstated/') 20 def callback(id): 21 """ 22 设置用户复职 23 """ 24 _manager_logic = manager_logic.ManagerLogic() 25 # 读取记录 26 result = _manager_logic.get_model_for_cache(id) 27 if result: 28 if result.get('is_work'): 29 return web_helper.return_msg(-1, '该管理员工作状态正常,不需要复职') 30 31 fields = { 32 'is_work': True, 33 'is_enabled': True, 34 } 35 # 读取记录 36 result = _manager_logic.edit_model(id, fields) 37 if result: 38 return web_helper.return_msg(0, '成功') 39 40 return web_helper.return_msg(-1, "管理员不存在")
完成以上代码后,记得在菜单管理中添加对应的菜单项哦。
版权声明:本文原创发表于 博客园,作者为 AllEmpty 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
python开发QQ群:669058475(本群已满)、733466321(可以加2群) 作者博客:http://www.cnblogs.com/EmptyFS/