Example #1
0
def sms_code():
    # 获取参数
    json_data = request.data
    dict_data = json.loads(json_data)
    mobile = dict_data.get('mobile')
    image_code = dict_data.get('image_code')
    image_code_id = dict_data.get('image_code_id')

    # 参数为空校验
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.DATAERR, errmsg='参数不全')

    # 校验手机的格式
    if not re.match('1[3-9]\d{9}', mobile):
        return jsonify(errno=RET.DATAERR, errmsg='手机号格式错误')

    # 通过图片验证码编号获取图片验证码
    try:
        image_code_data = redis_store.get('image_code:%s' % image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库查询错误')

    # 判断验证码是否过期
    if not image_code_data:
        return jsonify(errno=RET.DATAERR, errmsg='验证码过期')

    # 判断验证码是否正确
    if image_code.upper() != image_code_data.upper():
        return jsonify(errno=RET.DATAERR, errmsg='验证码错误')

    # 删除redis中的图片验证码
    try:
        redis_store.delete('image:%s' % image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库操作错误')

    # 生成一个随机的验证码
    sms_code = '%06d' % random.randint(0, 999999)
    current_app.logger.debug(str(sms_code))

    # 调用ccp发送短信验证码
    # ccp = CCP()
    # result = ccp.send_template_sms(mobile, [sms_code, 5], 1)
    # if result == -1:
    #     return jsonify(errno=RET.DATAERR, errmsg='短信发送失败')

    # 将短信保存到redis中
    try:
        redis_store.set('sms_code:%s' % mobile, sms_code,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='数据库操作错误')

    # 返回响应
    return jsonify(errno=RET.OK, errmsg='发送成功')
Example #2
0
def smscode():
    """
    1.接受提交的参数
    2.校验手机号码
    3.根据传入的图片验证码去redis中取验证码内容
    4.进行验证码比对
    5.生成短信验证码内容并且发送
    6.保存短信验证码到redis中
    7.返回发送成功的响应
    """
    param_dict = request.json
    mobile = param_dict.get("mobile")
    image_code = param_dict.get("image_code")
    image_code_id = param_dict.get("image_code_id")
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不全啊,sb!')
# 校验手机号码
    if not re.match('^1[3578][0-9]{9}$', mobile):
        return jsonify(error=RET.PARAMERR, errmsg='你输入的手机号码格式不对啊!!!')
    try:
        real_image_code = redis_store.get('ImageCode_' + image_code_id)
        if not real_image_code:
            return jsonify(errno=RET.NODATA, errmsg='验证码过期了!!')
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.NODATA, errmsg='验证码找不到数据')
    if image_code.lower() != real_image_code.decode().lower():
        # 验证码输入错误
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误A!!!")
    sms_code = "%06d" % random.randint(0, 999999)
    # result = CCP().send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES/60], '1')
    # if result != 0:
    #     return jsonify(errno=RET.THIRDERR, errmsg='短信验证码发送失败!!!!!!')
    current_app.logger.debug('短信验证码是:%s' % sms_code)
    try:
        redis_store.set('SMS' + mobile, sms_code,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='保存短信验证码失败了!')
    return jsonify(errno=RET.OK, errmsg='发送成功了!!!!!!!!!!!!!!!!')
Example #3
0
def image_code():
    print("q前段请求的url地址=" + request.url)
    #获取前段传递过来的一个验证码
    code_id = request.args.get("code_id")
    # name 图片验证码的名字
    # text 表示图片验证码内容
    # image表示图片
    #生成图片验证
    name, text, image = captcha.generate_captcha()
    print("图片验证内容=" + text)
    # 第一个参数是存储才key
    # 第二个参数是存储的验证内容
    # 第三个参数是有效期限
    redis_store.set("image_id_" + code_id, text, 5000)
    # make_response表示响应体对象,这个对象参数表示图片
    # 返回给页面的响应提是验证图片
    resp = make_response(image)
    # 告诉系统我们当前展示的是图片
    resp.headers['Content-Type'] = 'image/jpg'

    return resp
Example #4
0
def get_image_code():
    """
     1.获取参数
     2.调用方法生成验证码及图片
     3.保存到redis中
     4.返回响应
    """
    code_id = request.args.get('code_id')
    pre_id = request.args.get('pre_id')
    name, text, image = captcha.generate_captcha()
    try:
        redis_store.set('ImageCode_' + code_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
        if pre_id:
            redis_store.delete('ImageCode:' + pre_id)
    except Exception as e:
        current_app.logger.error(e)
        return make_response(jsonify(errno=RET.DATAERR, errmsg='保存图片验证码失败'))

    response = make_response(image)
    response.headers['Content-Type'] = 'image/jpg'
    return response
Example #5
0
def sms_code():
    # 手机号
    mobile = request.json.get("mobile")
    # 用户输入的图片验证码内容
    image_code = request.json.get("image_code")
    # 真实图片验证码编号
    image_code_id = request.json.get("image_code_id")
    # 检查传递过来的参数是否全部有值
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg="请输入参数")
    if not re.match(r"1[3456789]\d{9}", mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="请输入正确号码")
    #获取到redis里面的图片验证码
    real_image_code = redis_store.get("image_id_" + image_code_id)
    # 判断验证码是否过期,过期了就拿不到,就是空的
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码过期了")
    # 如果没过期,判断用户输入的验证码,转换成小写的进行判断用lower()
    if image_code.lower() != real_image_code.lower():
        return jsonify(errno=RET.PARAMERR, errmsg="请输入正确验证码")
    # 通过随机生成一个六位数的验证码,用占位符%d
    random_sms_code = "%06d" % random.randint(0, 999999)
    # 在服务器的redis里面存储短信验证码,用来给用户进行检验操作
    # 第一个参数,是电话号码作为key,
    # 第二个参数是短信验证码
    # 第三个参数是有效时间
    redis_store.set("sms_code_" + mobile, random_sms_code,
                    constants.SMS_CODE_REDIS_EXPIRES)

    print("短信验证码内容=" + random_sms_code)
    # 发送短信

    statuCode = CCP().send_template_sms(mobile, [random_sms_code, 5], 1)
    if statuCode != 0:
        return jsonify(errno=RET.THIRDERR, errmsg="短信发送失败")

    return jsonify(errno=RET.OK, errmsg="发送短信成功")
Example #6
0
def passport_image():

    # 获取前端携带参数
    cur_id = request.args.get('cur_id')
    pre_id = request.args.get('pre_id')

    # 调用captcha.generate_captcha() 获取验证码编号,验证码,验证码图片
    name, text, image_data = captcha.generate_captcha()

    try:
        # 存入redis数据库
        redis_store.set('image_code:%s' % cur_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)

        # 删除上一次存入redis的验证码
        redis_store.delete('image_code:%s' % pre_id)
    except Exception as e:
        current_app.logger.error(e)
        return '图片验证码操作失败'

    # 返回图片,设置一下返回图片的格式
    response = make_response(image_data)
    response.headers['Content-Type'] = 'image/png'
    return response