1. 程式人生 > >使用python實現使用者註冊邏輯僅供參考(flask框架實現)

使用python實現使用者註冊邏輯僅供參考(flask框架實現)

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='傳送失敗')