1. 程式人生 > >我的第一個python web開發框架(40)——後臺日誌與異常處理

我的第一個python web開發框架(40)——後臺日誌與異常處理

  1 #!/usr/bin/env python
  2 # coding=utf-8
  3 
  4 from bottle import put
  5 from common import web_helper, encrypt_helper, security_helper
  6 from common.string_helper import string
  7 from logic import manager_logic, manager_operation_log_logic
  8 
  9 
 10 @put('/api/login/')
 11 def post_login():
12 """使用者登陸驗證""" 13 ############################################################## 14 # 獲取並驗證客戶端提交的引數 15 ############################################################## 16 username = web_helper.get_form('username', '帳號') 17 password = web_helper.get_form('password', '
密碼') 18 verify = web_helper.get_form('verify', '驗證碼') 19 ip = web_helper.get_ip() 20 21 ############################################################## 22 # 從session中讀取驗證碼資訊 23 ############################################################## 24 s = web_helper.get_session()
25 verify_code = s.get('verify_code') 26 # 刪除session中的驗證碼(驗證碼每提交一次就失效) 27 if 'verify_code' in s: 28 del s['verify_code'] 29 s.save() 30 # 判斷使用者提交的驗證碼和儲存在session中的驗證碼是否相同 31 if verify.upper() != verify_code: 32 return web_helper.return_msg(-1, '驗證碼錯誤') 33 34 ############################################################## 35 ### 判斷使用者登入失敗次數,超出次做登入限制 ### 36 # 獲取管理員登入密碼錯誤限制次數,0=無限制,x次/小時 37 limit_login_count = 10 38 # 獲取操作出錯限制值 39 is_ok, msg, operation_times_key, error_count = security_helper.check_operation_times('login_error_count', limit_login_count, False) 40 # 判斷操作的出錯次數是否已超出了限制 41 if not is_ok: 42 return web_helper.return_msg(-1, msg) 43 44 ############################################################## 45 ### 獲取登入使用者記錄,並進行登入驗證 ### 46 ############################################################## 47 # 初始化操作日誌記錄類 48 _manager_operation_log_logic = manager_operation_log_logic.ManagerOperationLogLogic() 49 # 初始化管理員邏輯類 50 _manager_logic = manager_logic.ManagerLogic() 51 # 從資料庫中讀取使用者資訊 52 manager_result = _manager_logic.get_model_for_cache_of_where('login_name=' + string(username)) 53 # 判斷使用者記錄是否存在 54 if not manager_result: 55 return web_helper.return_msg(-1, '賬戶不存在') 56 57 # 獲取管理員id 58 manager_id = manager_result.get('id', 0) 59 # 獲取管理員姓名 60 manager_name = manager_result.get('name', '') 61 62 ############################################################## 63 ### 驗證使用者登入密碼與狀態 ### 64 ############################################################## 65 # 對客戶端提交上來的驗證進行md5加密將轉為大寫(為了密碼的保密性,這裡進行雙重md5加密,加密時從第一次加密後的密串中提取一段字元串出來進行再次加密,提取的串大家可以自由設定) 66 # pwd = encrypt_helper.md5(encrypt_helper.md5(password)[1:30]).upper() 67 # 對客戶端提交上來的驗證進行md5加密將轉為大寫(只加密一次) 68 pwd = encrypt_helper.md5(password).upper() 69 # 檢查登入密碼輸入是否正確 70 if pwd != manager_result.get('login_password').upper(): 71 # 記錄出錯次數 72 security_helper.add_operation_times(operation_times_key) 73 # 記錄日誌 74 _manager_operation_log_logic.add_operation_log(manager_id, manager_name, ip, '' + manager_name + '】輸入的登入密碼錯誤') 75 return web_helper.return_msg(-1, '密碼錯誤') 76 # 檢查該賬號雖否禁用了 77 if not manager_result.get('is_enabled'): 78 # 記錄出錯次數 79 security_helper.add_operation_times(operation_times_key) 80 # 記錄日誌 81 _manager_operation_log_logic.add_operation_log(manager_id, manager_name, ip, '' + manager_name + '】賬號已被禁用,不能登入系統') 82 return web_helper.return_msg(-1, '賬號已被禁用') 83 84 # 登入成功,清除登入錯誤記錄 85 security_helper.del_operation_times(operation_times_key) 86 87 ############################################################## 88 ### 把使用者資訊儲存到session中 ### 89 ############################################################## 90 manager_id = manager_result.get('id') 91 s['id'] = manager_id 92 s['login_name'] = username 93 s['name'] = manager_result.get('name') 94 s['positions_id'] = manager_result.get('positions_id') 95 s.save() 96 97 ############################################################## 98 ### 更新使用者資訊到資料庫 ### 99 ############################################################## 100 # 更新當前管理員最後登入時間、Ip與登入次數(欄位說明,請看資料字典) 101 fields = { 102 'last_login_time': 'now()', 103 'last_login_ip': string(ip), 104 'login_count': 'login_count+1', 105 } 106 # 寫入資料庫 107 _manager_logic.edit_model(manager_id, fields) 108 # 記錄日誌 109 _manager_operation_log_logic.add_operation_log(manager_id, manager_name, ip, '' + manager_name + '】登陸成功') 110 111 return web_helper.return_msg(0, '登入成功')