个人第一个python web开发框架(38)——管理员管理功能

  后台管理员的管理功能,它主要用来管理后台的登陆帐号,绑定权限,固然若是想将后台管理扩展成企业相关管理系统,好比用于公司人事管理,在这个基础上进行适当扩展就能够了。python

  咱们先看看界面效果(也能够看着数据字典来写页面和接口)web

  看起来功能项仍是很多,管理员也能够直接改成员工管理。列表没有什么特别的地方,因此接口也比较简单,不详细讲解。固然你也能够在这个基础上增长一下按姓名、手机、帐号、部门和职位等查询条件上去json

 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, "查询失败")

 

  因为在设计管理员数据表时,字段也有很多,因此咱们在管理新增与编辑页面上,能够改成标签分类方式查看,这样会比较容易找到本身想要的东西,而不是所有罗列下来一大堆api

  咱们将管理员信息分为基本信息、权限信息和帐户安全设置三类,这样看起来会清晰不少。安全

  在新增与编辑页面,因为咱们的管理员权限须要绑定部门与职位,因此页面上须要增长部门树列表获取与职位列表获取接口的访问,在添加菜单时你们也要记得将这两个调用接口加上,否则等底层权限加上之后,这些页面数据都获取不了。框架

  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工具函数的话,会以为这些代码很是熟悉,能够直接阅读,固然若是你对工具函数不熟的话,看起来可能会有点蒙,因此说要学好一个陌生框架,最好先熟悉它的工具函数有什么功能。前面让你们必定要反复使用单元测试和手打代码,就是让你们能更容易熟悉这些函数,在后面查看代码时一点都不会吃力。工具

  第三个是编辑管理员信息接口,代码同新增接口只有很小的差异。post

 

  而后是删除接口,在删除管理员时,咱们须要作个限制,判断它是否在职,在职的不能直接删除,以免误操做。对于管理员帐号,若是离职了,最好不要删除,能够留着有须要时查询,固然若是离职员工不少,相关人员又有强迫症不想查看到的话,能够将管理员管理分为两部分(两个单独的页面),一个是在职员工管理,一个是离职页面管理。单元测试

 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/

相关文章
相关标签/搜索