1. 程式人生 > 實用技巧 >新聞詳情——驗證碼處理

新聞詳情——驗證碼處理

1.實現簡訊驗證碼

可以用打斷點的形式看,我們發現從redis裡面取得驗證碼是二進位制的,把它給轉換成字串形式

@passport_blue.route("/sms_code",methods = ["POST"])
def sms_code():
    """
    傳送簡訊驗證碼
    1接收引數  (手機號,使用者填寫的圖片驗證碼,UUID)
    2.校驗引數
      2.1校驗三個引數是否正確
      2.2校驗手機號是否合法
      2.3校驗圖片驗證碼
        拿到UUID到redis中找到相對應的驗證碼進行對比
        考慮到沒有拿到的情況
        將使用者傳過來的圖片驗證碼和伺服器中儲存的進行對比
    3.傳送簡訊
       3.1隨機生成一個驗證碼
       3.2傳送驗證碼
    4.將生成的手機驗證碼儲存在redis中方便下一次使用
    5.返回(訊息)
    :return: 
    
""" # 傳送簡訊驗證碼 # 1接收引數 (手機號,使用者填寫的圖片驗證碼,UUID) res = request.data #二進位制的json資料 res_dict = json.loads(res) #把二進位制轉換為字典型別的資料 mobile = res_dict.get("mobile") #因為用中括號的話找不到對應的鍵就會報錯,所以我們用.get來獲取,沒接受到會報None image_code = res_dict.get("image_code") #字串裡面的內容是前端穿過來的變數,等號前面的是後端的
image_code_id = res_dict.get("image_code_id") # 2.校驗引數 # 2.1校驗三個引數是否正確 if not all([mobile,image_code,image_code_id]): #如果沒有接受到這三個引數 return jsonify(errno=RET.PARAMERR,errmsg="缺少引數") #那麼就會報一個缺少引數 # 2.2校驗手機號是否合法 if not re.match("^1[3789][0-9]{9}$
",mobile): #這裡我們指定了第二位是3789其中的一位,如果判斷手機號不合法 return jsonify(errno=RET.PARAMERR, errmsg="手機號不合法") #那麼就會抱一個手機號不合法 # 2.3校驗圖片驗證碼 # 拿到UUID到redis中找到相對應的驗證碼進行對比 try: #在資料庫操作很危險的,所以用try image_code_server = redis_store.get("image_code:"+ image_code_id) #用redis資料庫連線在裡面獲取UUID,但是這裡的UUID我們改成image_code_id except Exception as e: current_app.logger.error(e) #用日誌記錄錯誤 return jsonify(errno=RET.DBERR, errmsg="圖形驗證碼獲取失敗") #報錯了就返回一個圖形驗證碼獲取失敗 # 考慮到沒有拿到的情況 if not image_code_server: return jsonify(errno=RET.NODATA, errmsg="沒有找到圖形驗證碼") #如果沒有找到,返回一個沒有有找到圖形驗證碼 # 將使用者傳過來的圖片驗證碼和伺服器中儲存的進行對比 if image_code_server.lower() != image_code.lower(): #驗證碼大寫,使用者可以寫小寫怎麼辦,新增一個.lower(),可以大小寫轉換,無論寫大寫還是小寫都讓使用者過了 return jsonify(errno=RET.PARAMERR, errmsg="圖形驗證碼錯誤") #判斷是否等於,錯誤返回一個圖形驗證碼錯誤 # 3.傳送簡訊 # 3.1隨機生成一個驗證碼 sms_code = "%04d" % random.randint(0,5555) #用格式化輸出來處理,雙引號裡面寫一個%d代表數字,在d前面加04只要四位,不夠用零來補,後面的%是表示後面的資料往前面填 # 3.2傳送驗證碼 # res_sms = CCP().send_template_sms(mobile, [sms_code, 5], 1) #函式直接呼叫,把手機號和驗證碼改成我們剛剛寫的,並用一個變數來接受 print(sms_code) #這裡肯定是會報-1的,原因網路不行,所以這裡我們直接print手機驗證碼 res_sms = 0 #這裡直接讓手機驗證碼等於0,成功傳送出去 if not res_sms == 0: return jsonify(errno=RET.THIRDERR, errmsg="簡訊傳送失敗") #做一步判斷,在libs>sms裡,0代表傳送成功,那麼如果不等於0,返回一個簡訊傳送失敗 # 4.將生成的手機驗證碼儲存在redis中方便下一次校驗 try: redis_store.set("sms_code:"+mobile,sms_code,constants.SMS_CODE_REDIS_EXPIRES) #繼續用redis來儲存,這裡的鍵用的是手機號,來找對應的手機驗證碼,後面設定的是時間 except Exception as e: current_app.logger.error(e) #日誌記錄錯誤 return jsonify(errno=RET.DATAERR, errmsg="簡訊驗證碼傳送失敗") #返回一個簡訊驗證碼傳送失敗 # 5.返回(訊息) return jsonify(errno=RET.OK, errmsg="簡訊驗證碼傳送成功") #上面的都執行成功後,返回一個成功