後臺管理員的管理功能,它主要用來管理後臺的登陸帳號,綁定權限,固然若是想將後臺管理擴展成企業相關管理系統,好比用於公司人事管理,在這個基礎上進行適當擴展就能夠了。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/