使用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='发送失败')

猜你喜欢

转载自blog.csdn.net/qq_42514453/article/details/83317986