我的第一個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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM