使用python實現使用者註冊邏輯僅供參考(flask框架實現)
阿新 • • 發佈:2019-01-03
1.基本的註冊邏輯實現
2.這裡程式碼給的是使用者進入頁面,已經輸入了圖片驗證碼,由於前面程式碼邏輯比較簡單,程式碼就不上了,邏輯上來說就是使用者進入註冊頁面,輸入手機號碼,輸入圖片驗證碼,前端生成驗證碼唯一編碼,通常使用uuid,通用唯一識別符號,或者使用Linux時間戳向後臺後臺請求驗證碼圖片,後臺生成驗證碼,並將驗證碼編碼和驗證碼存入資料庫中(一般使用記憶體級資料庫).
3.接下來是使用者輸入手機號,點選獲取簡訊驗證碼,這裡使用第三方平臺,並將第三方提供的SDK進行進一步封裝後使用.(沒有放程式碼,平臺很多,根據使用的平臺使用)
4.這裡存入的是Redis資料庫,下面對資料庫存入資料格式有具體的分析
# 獲取簡訊息驗證碼檢視 # 前端採取get請求訪問,攜帶引數,手機號碼,驗證碼編號,使用者輸入的驗證碼 # 訪問127.0.0.1:5000/api/v1.0/sms_codes?image_code_id=&image_code= @api.route('/sms_codes/<re(r"13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(18[0,5-9]))\d{8}"):mobile>') def get_sms_code(mobile): """獲取簡訊驗證碼""" # 獲取資料 image_code = request.args.get('image_code') image_code_id = request.args.get('image_code_id') # 校驗資料 if not all([image_code, image_code_id]): # 引數不完整 return jsonify(errno=RET.PARAMERR, errmsg='引數不完整') # 業務處理:從redis中獲取驗證碼資訊 # 判斷圖片驗證碼是否過期 try: real_image_code = redis_store.get('image_code_%s' % image_code_id) except Exception as e: current_app.logger.error(e) return jsonify(errno=RET.DBERR, errmsg='redis資料庫異常') # 判斷驗證碼是否過期 if real_image_code is None: # 不存在或者已經過期 return jsonify(errno=RET.NODATA, errmsg='圖片驗證碼已過期') # 與使用者填寫的進行對比(忽略大小寫) if real_image_code.lower() != image_code.lower(): # 有驗證碼錯誤 return jsonify(errno=RET.DATAERR, errmsg='驗證碼錯誤') # 判斷手機號是否存在 try: # 如果不存在返回none user = User.query.filter_by(mobile=mobile).first() except Exception as e: current_app.logger.error(e) # 這裡代表資料庫連線失敗,但是不應該返回錯誤,在最終註冊的時候再進行最後的校驗 else: # 如果發生異常,user就沒有值了,沒有異常的時候進行判斷,否則程式崩潰 if user is not None: # 該手機號已經註冊過 return jsonify(errno=RET.DATAEXIST, errmsg='手機號已經存在') # 若果手機號不存在,生成隨機簡訊驗證碼 sms_code = '%06d' % random.randint(0, 999999) # 驗證碼存入redis中,使用字串儲存,設定過期時間為300秒 try: redis_store.setex('sms_code_%s' % mobile, SMS_CODE_REDIS_EXPIRES, sms_code) except Exception as e: current_app.logger.error(e) # 儲存失敗 return jsonify(errno=RET.DBERR, errmsg='儲存驗證碼失敗') # 傳送簡訊驗證碼 ccp = CCP() # 幾分鐘過期 result = ccp.sendTemplateSMS(mobile, [sms_code, SMS_CODE_REDIS_EXPIRES / 60], 1) # 返回響應 if result == 0: # 傳送成功 return jsonify(errno=RET.OK, errmsg='傳送成功') else: return jsonify(errno=RET.THIRDERR, errmsg='傳送失敗')