示例#1
0
def get_image_code():
    """实现验证码图片显示"""
    # 1.接受把前段uuid并当做img_code_id
    img_code_id = request.args.get('code_id')
    # 2.生成验证码内容value(图片和真实数据)
    name, text, image = captcha.generate_captcha()
    current_app.logger.debug('图片验证码:%s' % text)
    # 3.将uuid和真实数据保存到redis,并添加超时时间
    redis_store.set(img_code_id, text, IMAGE_CODE_REDIS_EXPIRES)
    # 4.设置respons数据的类型
    # 5.创建response对象
    response = make_response(image)
    response.headers["Content-Type"] = "image/jpg"
    # 6.将生成的图片返回给前段展示
    return response
示例#2
0
def image_code():
    image_code_id = request.args.get("imageCodeId", None)
    if not image_code_id:
        abort(404)
    name, text, image = captcha.generate_captcha()
    try:
        redis_store.set("ImageCodeId:" + image_code_id,
                        text,
                        ex=constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        abort(500)
    response = make_response(image)
    response.headers['Content-Type'] = 'image/jpg'
    return response
示例#3
0
def send_sms():
    """验证验证码正确,发送短信"""
    # 1. 接收参数,mobile,image_code, image_code_id
    data = request.json
    mobile = data.get("mobile", None)
    image_code = data.get("image_code", None)
    image_code_id = data.get("image_code_id", None)

    # 2. 判断参数不能为空, 判断参数
    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="手机号格式不正确")

    # 3. 验证redis数据库中验证码是否正确
    try:
        real_image_code = redis_store.get("image_code_id_" + image_code_id)
    except Exception as ret:
        current_app.logger.error(ret)
        return jsonify(errno=RET.DBERR, errmsg="数据查询错误")

    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码过期")

    # 4. 通过验证后,生成并存储短信验证码,并通过第三方网站向手机号发送验证码

    if image_code.upper() != real_image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")

    sms_code_str = "%06d" % random.randint(0, 999999)
    current_app.logger.debug("短信验证码内容是:%s" % sms_code_str)
    # 6. 发送短信验证码
    # result = CCP().send_template_sms(mobile, [sms_code_str, constants.SMS_CODE_REDIS_EXPIRES / 5], "1")
    # if result != 0:
    #     # 代表发送不成功
    #     return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")

    # 保存验证码内容到redis
    try:
        redis_store.set("SMS_" + mobile, sms_code_str,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据保存失败")

    # 7. 告知发送结果
    return jsonify(errno=RET.OK, errmsg="发送成功")
示例#4
0
文件: views.py 项目: Spiritjxy/INFO
def get_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('1[3456789]\\d{9}', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg='手机号格式不正确')
    # 通过验证码id取出验证码
    try:
        image = 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:
        return jsonify(errno=RET.NODATA, errmsg='图片验证码过期')
    # 判断输入的验证码是否正确
    if image_code.upper() != image.upper():
        return jsonify(errno=RET.DATAERR, errmsg='图片验证码不正确')
    # 生成短信验证码
    sms_code = '%06d' % random.randint(0, 999999)
    # 保存验证码在redis
    try:
        redis_store.set('sms_code:%s' % mobile, sms_code, constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='保存短信验证码失败')

    # 打印短信验证码代替云通讯
    print(sms_code)

    # 调用云通讯发送短信
    # try:
    #     ccp = CCP()
    #     result = ccp.send_template_sms(mobile, [sms_code, constants.SMS_CODE_REDIS_EXPIRES / 60], 1)
    # except Exception as e:
    #     current_app.logger.error(e)
    #     redis_store.delete('sms_code:%s' % mobile)
    #     return jsonify(errno=RET.THIRDERR, errmsg='调用云通讯失败')
    # if result != 0:
    #     redis_store.delete('sms_code:%s' % mobile)
    #     return jsonify(errno=RET.DATAERR, errmsg='发送短信失败')

    return jsonify(errno=RET.OK, errmsg='发送短信成功')
示例#5
0
def modify_password():
    """修改密码"""
    if request.method == "GET":
        return render_template('news/user_modify_password.html')
    else:
        # 接收参数
        user_phone = request.form.get('phone')
        password = request.form.get('password')
        # 校验参数
        if not all([user_phone, password]):
            return jsonify(errno=response_code.RET.PARAMERR, errmsg='参数错误')
        if not re.match('^1[35678][0-9]{9}$', user_phone):
            return jsonify(errno=response_code.RET.PARAMERR, errmsg='手机号错误')
        try:
            # 如果手机号正常,通过手机号查询用户
            modify_user = User.query.filter(User.mobile == user_phone).first()
        except Exception as e:
            logging.error(e)
            return jsonify(errno=response_code.RET.DBERR, errmsg='查询用户失败')
        if not modify_user:
            return jsonify(errno=response_code.RET.NODATA, errmsg='您没有注册')
        # 发送短信验证码
        # 随机生成6位短信验证码
        sms_code = '%06d' % random.randint(0, 999999)
        print('短信验证码:', sms_code)
        # 发送短信
        # result = CCP().send_template_sms(modify_user, [sms_code, 3], 1)
        # # 判断发送的结果
        # if result != 0:
        #     logging.error(result)
        #     return jsonify(errno=response_code.RET.PARAMERR, errmsg='短信发送失败!')
        # # 保存短信码到redis便于下次验证
        try:
            redis_store.set('SMSCode:' + user_phone, sms_code,
                            constants.SMS_CODE_REDIS_EXPIRES)
        except Exception as e:
            logging.error(e)
            return jsonify(errno=response_code.RET.DBERR, errmsg='短信码保存失败!')
        # 修改数据
        modify_user.password = password
        # 同步数据
        try:
            db.session.commit()
        except Exception as e:
            logging.error(e)
            return jsonify(errno=response_code.RET.DBERR, errmsg='保存新密码失败')
        # 返回响应结果
        return jsonify(errno=response_code.RET.OK, errmsg='修改成功')
示例#6
0
文件: views.py 项目: qxs/information
def image_code():
    imageCodeId = request.args.get('imageCodeId')
    if not imageCodeId:
        abort(403)

    name, text, image = captcha.generate_captcha()
    current_app.logger.debug(text)
    try:
        redis_store.set('imageCoedId:' + imageCodeId, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logging.error(e)
        abort(500)
    response = make_response(image)
    response.headers['Content-Type'] = 'image/jpg'
    return response
示例#7
0
def sms_code():
    #     获取手机号
    # 获取验证码
    # 第一次不用存手机号
    # 验证码对比失败,应该是验证码的值取的不对,检查获取的验证码是否正确,检查从server中获取的值是否正确
    json_dict = request.json
    mobile = json_dict.get("mobile")
    image_code_client = json_dict.get("image_code")
    image_code_id = json_dict.get("image_code_id")
    print('id1-----------------------', image_code_id)
    # 从客户端获取的验证码应该和从服务器获取的验证码一致,在前端在获取值的时候,会绑定uuid
    # 校验参数是否存在
    if not all([mobile, image_code, image_code_client]):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='缺少参数')
# 判断手机格式是否正确
    if not re.match(r'^1[345678][0-9]{9}$', mobile):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='手机号格式错误')
# 校验手机验证码是否和redis中的匹配,在这之前先判断在服务器中是否存在这个验证码?,(不存在的原因是已经失效了)如果不存在就不用往下判断了
    try:
        image_code_id_server = redis_store.get('ImageCode:' + image_code_id)
        print('id------------------------', image_code_id_server)
    #     这是空的
    except Exception as e:
        current_app.logger(e)
        return jsonify(errno=response_code.RET.DBERR, errmsg='查询图片验证码失败')
        # 如果数据库中获取失败,给客户友好提示
    if not image_code_id_server:
        return jsonify(errno=response_code.RET.DBERR, errmsg='查询图片验证码失败')
    if image_code_client.lower() != image_code_id_server.lower():
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='输入验证码有误')
# 如果存在,给手机号发送短信
    sms_code = '%06d' % random.randint(0, 99999)
    result = CCP().send_template_sms(mobile, [sms_code, 5], 1)
    if result != 0:
        # if not result:
        return jsonify(errno=response_code.RET.THIRDERR, errmsg='发送短信验证码失败')
#     反之发送成功,成功后将手机号作为建,将手机验证码存储到redis中
    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=response_code.RET.DBERR, errmsg='保存短信验证码失败')

# 7.响应短信验证码发送的结果
    return jsonify(errno=response_code.RET.OK, errmsg='发送短信验证码成功')
示例#8
0
def get_imgecode():
    """获取验证码图片"""

    # 1.获取参数

    # a.获取前端传上来的uuid编码,imageCodeId
    imageCodeId = request.args.get("imageCodeId", "")

    # 2.校验参数

    # a.判断uuid编码是否为空

    if not imageCodeId:
        abort(404)

    # 3.逻辑处理

    # a.获取生成验证码图片对象,获取真实的验证码

    # ('fXZJN4AFxHGoU5mIlcsdOypa', 'JGW9', '\x89PNG\r\n\x1a\n\x00\x00\x00\r...')

    name, text, image = captcha.generate_captcha()

    # b.将图片验证码真实的之使用编码存储到redis
    try:
        # eg:imagecode_uuid:dadw
        redis_store.set("imagecode_%s" % imageCodeId,
                        text,
                        ex=constants.IMAGE_CODE_REDIS_EXPIRES)

    except Exception as e:

        abort(500)

    # 4.返回值处理
    # a.将图片对象返回给前端展示

    # 创建响应对象
    response = make_response(image)

    # 设置响应对象中响应头内容的类型

    response.headers["Content-Type"] = "image/jpeg"

    # 返回响应对象

    return response
示例#9
0
def send_sms_code():
    """
    发送短信验证码视图
    1.获取参数:手机号,图片验证码,图片验证码的编号
    2.校验参数:参数是否符合规则,判断是否有值
    3.校验图片验证码内容,校验不成功,返回验证码错误
    4.生成手机验证码,发送短信验证码
    5.告知发送结果
    :return: json
    """
    # 1.获取前端的参数,包括用户输入手机号,图片验证码和生成的图片验证码编号,数据以json的格式发送
    params_dic = request.json
    mobile = params_dic.get("mobile")
    image_code = params_dic.get("image_code")
    image_code_id = params_dic.get("image_code_id")
    # 2.校验参数是否都有值,以及校验手机号是否正确
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
    if not re.match('1[35678]\\d{9}', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号格式不正确")
    # 3.从redis中取出图片验证码的内容
    try:
        real_image_code = redis_store.get("ImageCodeId_" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码已过期")
    # 4.校验图片验证码
    if real_image_code.upper() != image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")
    # 5.通过验证,生成短信验证码内容(随机数),将内容存入redis
    sms_code_str = "%06d" % random.randint(0, 999999)
    current_app.logger.debug("短信验证码内容:{}".format(sms_code_str))
    try:
        redis_store.set("SMS_" + mobile, sms_code_str,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="验证码生成保存失败")
    # 6.发送短信
    result = CCP().send_template_sms(
        mobile, [sms_code_str, constants.SMS_CODE_REDIS_EXPIRES / 60], "1")
    if result != 0:
        return jsonify(errno=RET.THIRDERR, errmsg="第三方平台错误,短信发送失败")
    # 7.告知发送结果
    return jsonify(errno=RET.OK, errmsg="发送成功")
示例#10
0
def registration():
    '''代理日常加粉统计'''
    # 校验token
    token = request.headers.get('Authorization')
    data = verify_token(token)
    if data == False:
        return jsonify(errno=RET.DATAERR, errmsg='校验token失败')

    if request.method == 'POST':
        agent_id = request.get_json().get('agent_id')
        today_fans = request.get_json().get('today_fans')
        if not redis_store.get('agent_current_fans_' + str(agent_id)):
            # 判断redis中是否存有今日当前的粉丝量
            agents = AgentInfo.query.filter_by(id=agent_id, is_delete=0)
            for agent in agents:
                today = datetime.now()
                expire_time = datetime(today.year, today.month, today.day, 23,
                                       59, 59)  # 有效期至当天的23:59:59
                stat = Stat()
                stat.agent_id = agent_id
                stat.today_fans = int(today_fans)
                redis_store.set('agent_current_fans_' + str(agent_id),
                                agent.current_fans)
                redis_store.expireat('agent_current_fans_' + str(agent_id),
                                     expire_time)
                agent.current_fans = agent.current_fans + int(today_fans)
                stat.total_fans = agent.current_fans
                db.session.add(agent)
                db.session.add(stat)
                try:
                    db.session.commit()
                except Exception as e:
                    db.session.rollback()
                    return jsonify(errno=RET.SERVERERR, errmsg='提交失败')
            agent_info = [AgentInfo.to_dict(agent) for agent in agents]
            return jsonify(errno=RET.OK, agent_info=agent_info, errmsg='ok')
        else:
            # 如果redis存在今日当前的粉丝量,则不允许提交
            return jsonify(errno=RET.DATAERR, errmsg='你已提交')
    else:
        try:
            agents = AgentInfo.query.filter(AgentInfo.status == 1).filter(
                AgentInfo.is_delete == 0)
            agent_info = [AgentInfo.to_dict(agent) for agent in agents]
            return jsonify(errno=RET.OK, agent_info=agent_info, errmsg='ok')
        except Exception as e:
            return jsonify(errno=RET.SERVERERR, errmsg='数据库查询错误')
示例#11
0
def get_sms_code():
    """
    1.取到参数mobile,image_code,image_code_id
    2.判断是否有值
    3.取出redis里面存放的图片验证码
    4.与用户提交的验证码内容进行对比,如果对比不一致,返回 输入错误的验证码
    5.如果一致,生成验证码的内容(随机数据)
    6.发送短信验证码,并保存到redis中,设置过期时间
    7.告知发送结果
    :return:
    """
    params_dict = request.json
    mobile = params_dict.get("mobile")
    image_code = params_dict.get("image_code")
    image_code_id = params_dict.get("image_code_id")

    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.DBERR, errmsg="参数有误")
    if not re.match("1[3456789]\d{9}", mobile):
        return jsonify(errno=RET.DBERR, errmsg="手机号码格式有误")

    try:
        real_image_code = redis_store.get("ImageCodeId_" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")

    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码已过期")
    if real_image_code.upper() != image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")

    sms_code_str = "%06d" % random.randint(0, 999999)
    current_app.logger.debug("短信验证码的内容是:%s" % sms_code_str)
    # result=CCP().send_template_sms(mobile,[sms_code_str,int(constants.SMS_CODE_REDIS_EXPIRES / 60)],1)
    # # 发送不成功
    # if result!=0:
    #     return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")
    # 发送成功 1.存储到redis以便后续验证    2.发送成功消息
    try:
        redis_store.set("sms_" + mobile, sms_code_str,
                        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="发送成功")
示例#12
0
def send_sms():
    # params_dict=json.loads(request.data)
    params_dict=request.json
    mobile = params_dict.get("mobile")
    image_code = params_dict.get("image_code")
    image_code_id = params_dict.get("image_code_id")

    if not all([mobile, image_code_id, image_code]):
        # 参数不全
        return jsonify(errno=RET.PARAMERR, errmsg="参数不全")

    if not re.match("^1[3578][0-9]{9}$", mobile):
        # 提示手机号不正确
        return jsonify(errno=RET.PARAMERR, errmsg="手机号不正确")

    try:
        real_image_code = redis_store.get("ImageCode_" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        # 获取图片验证码失败
        return jsonify(errno=RET.DBERR, errmsg="获取图片验证码失败")

    if not real_image_code:
        # 验证码已过期
        return jsonify(errno=RET.NODATA, errmsg="验证码已过期")

    if image_code.lower() != real_image_code.lower():
        # 验证码输入错误
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")


    sms_code_str="%06d" % random.randint(0,999999)
    current_app.logger.debug("短信验证码内容是:%s" % sms_code_str)
    result = CCP().send_template_sms(mobile, [sms_code_str, constants.SMS_CODE_REDIS_EXPIRES / 60], "1")
    if result !=0:
        # 发送短信失败
        return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")

    try:
        redis_store.set("SMS_" + mobile, sms_code_str, constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        # 保存短信验证码失败
        return jsonify(errno=RET.DBERR, errmsg="保存短信验证码失败")

        # 7. 返回发送成功的响应
    return jsonify(errno=RET.OK, errmsg="发送成功")
示例#13
0
文件: views.py 项目: hwei002/news
def send_sms_code():

    # return jsonify(errno=RET.OK, errmsg="发送成功")  # 打开此行,测试手机验证码发送后填写时间倒计时功能是否奏效。

    # 1. 获取参数:用户手机号、用户输入的图片验证码、图片验证码的id
    params_dict = request.json  # 等价于 josn.loads(request.data)
    mobile, image_code, image_code_id = params_dict["mobile"], params_dict["image_code"], params_dict["image_code_id"]

    # 2. 校验是否有空值,以及可能的手机号格式错误
    if not all ([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
    if not re.match("^1[35678][0-9]{9}$", mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号格式不正确")

    # 3. 从redis中取出真实验证码内容
    try:
        real_image_code = redis_store.get("ImageCodeId_" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码已过期")

    # 4. 与用户所输入的验证码对比,如果不一致,返回验证码输入错误
    if real_image_code.upper() != image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")

    # 5. 生成短信验证码内容,随机6位数字符串
    sms_code_str = "%06d" % random.randint(0, 999999)
    # print(sms_code_str)  # 确保容联云代码无误后,开发时用这三行,可跳过容联云仅能给指定手机发短信的限制,测试注册成功后自动跳转
    # redis_store.set('SMS_' + mobile, sms_code_str, constants.SMS_CODE_REDIS_EXPIRES)
    # return jsonify(errno=RET.OK, errmsg="发送成功")

    # 6. 发送短信验证码
    result = CCP().send_template_sms(mobile, [sms_code_str, constants.SMS_CODE_REDIS_EXPIRES//60], 1)
    if result != 0:
        return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")

    # 7. 保存验证码内容到redis
    try:
        redis_store.set('SMS_' + mobile, sms_code_str, constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据保存失败")

    # 8. 告知结果
    return jsonify(errno=RET.OK, errmsg="发送成功")
示例#14
0
def send_sms_code():
    """
    发送短信,获取图片验证码编号,手机号码,图片验证码内容
    :return:
    """
    #获取用户输入的手机号,图片验证码,图片编号
    # return jsonify(errno=RET.OK, errmsg="发送短信成功")
    params_dict=request.json

    mobile=params_dict["mobile"]
    image_code=params_dict["image_code"]
    image_code_id=params_dict["image_code_id"]
    #效验#参数是否有值
    if not all([mobile,image_code,image_code_id]):
        return jsonify(errno=RET.PARAMERR,errmsg="参数有误")
    #效验手机号码是否正确
    if not re.match('1[35678]\\d{9}',mobile):
        return jsonify(errno=RET.PARAMERR,errmsg="手机号码是否正确")
    #从redis取出手机号
    try:
        real_image_code=redis_store.get("ImageCodeId_%s"% image_code_id)
        current_app.logger.debug("ImageCodeId_"+ image_code_id)
        current_app.logger.debug(real_image_code)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码已过期")
    #对比验证码
    if real_image_code.upper() != image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")
    #生成短信验证码,保证数字为6位,不够用0补上
    sms_code_str="%06d"%random.randint(0,999999)
    current_app.logger.debug(sms_code_str)
    #发送短信验证码
    # result=CCP().send_template_sms(mobile,[sms_code_str,constants.SMS_CODE_REDIS_EXPIRES/5],"1")
    # if result !=0:
    #     return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")
    #保存验证码到redis
    try:
        redis_store.set("SMS_"+mobile,sms_code_str,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="发送短信成功")
示例#15
0
def send_sms_code():
    """
    发送短信的逻辑
    :return:
    """
    # 1.将前端参数转为字典
    mobile = request.json.get('mobile')  # 手机号
    # print(mobile)
    image_code = request.json.get('image_code')  # 用户输入的图片验证码内容
    image_code_id = request.json.get('image_code_id')  # 真实图片验证码编号
    # 2. 校验参数(参数是否符合规则,判断是否有值)
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数错误')
    # 判断参数是否有值
    # match尝试从字符串的起始位置匹配,返回值是数组或者是null
    # 验证手机号的正则
    if not re.match(r'^1[3456789]\d{9}$', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg='手机号格式错误')
    # 3. 先从redis中取出真实的图片验证码内容
    try:
        real_image_code = redis_store.get('image_code' + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='图片验证码失误')
    if not real_image_code:
        return jsonify(errno=RET.DBERR, errmsg='图形有效期已过')
    # 4. 与用户的验证码内容进行对比,如果对比不一致,那么返回验证码输入错误
    if real_image_code != image_code:
        return jsonify(errno=RET.DATAERR, errmsg='图形验证码输入错误')
    # 5. 如果一致,生成短信验证码的内容(随机数据)
    sms_code_num = '%06d' % random.randint(0, 999999)
    print(sms_code_num)
    # 6. 发送短信验证码,云通讯辅助
    CCP().send_template_sms(
        mobile, [sms_code_num, constants.SMS_CODE_REDIS_EXPIRES / 5], "1")
    # if not result != 0:
    #     return jsonify(errno=RET.THIRDERR, errmsg='短信验证发送失败')
    # # 保存验证码内容到redis
    try:
        redis_store.set('sms_code_num' + mobile, sms_code_num,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='短信验证保存失败')
    # 7. 告知发送结果
    return jsonify(errno=RET.OK, errmsg='发送成功')
示例#16
0
def get_sms_code():
    # 1.获取参数:手机号、uuid、图片验证码
    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')
    print(dict_data)
    # 2.校验参数是否为空
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg='参数不完整')
    # 3.验证手机号格式
    if not re.match('1[356789]\\d{9}', mobile):
        return jsonify(errno=RET.DATAERR, errmsg='手机号格式错误')
    # 4.取出uuid在redis中对应的图片验证码
    try:
        redis_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='查找图片验证码失败')
    # 5.判断图片验证码是否过期
    if not redis_image_code:
        return jsonify(errno=RET.NODATA, errmsg='图片验证码过期')
    # 6.判断验证码是否一致
    if image_code.lower() != redis_image_code.lower():
        return jsonify(errno=RET.DATAERR, errmsg='图片验证码不正确')
    # 7.生成短信验证码
    sms_code = '%06d' % random.randint(0, 999999)

    # 8.通过云通讯发送短信验证码(手机号,(短信验证码、有效期),模板)
    # ccp = CCP()
    # result = ccp.send_template_sms(mobile,[sms_code,5],1)
    # if result == -1:
    #     return jsonify(errno=RET.THIRDERR,errmsg='短信验证码发送失败')

    current_app.logger.debug('短信验证码是:%s' % sms_code)

    # 9.保存到redis
    try:
        redis_store.set('sms_code:%s' % mobile, sms_code,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DATAERR, errmsg='短信保存失败')
    # 10.返回前端
    return jsonify(errno=RET.OK, errmsg='发送成功')
示例#17
0
def sms_code():
    # 获取前端传递过来的json数据
    mobile = request.json.get("mobile")

    # 参数表示图片验证码的内容
    image_code = request.json.get("image_code")

    # 表示图片验证码的id
    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_code" + image_code_id)

    # 判断redis中的验证码是否过期
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="当前验证码已过期")

    # 到了这里说明验证码还在有效期,判断用户输入的验证码是否和redis中保存的相同,都转换为小写,方便用户体验
    if image_code.lower() != real_image_code.lower():
        return jsonify(errno=RET.PARAMERR, errmsg="请输入正确的验证码")

    # 通过随机数生成一个6位的验证码,并用0占位补齐六位
    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)

    # 发送短信到指定的手机号码>>括号中数据1>手机号码2>随机数字,5分钟有效,返回状态码为1

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

    return jsonify(errno=RET.OK, errmsg="发送短信成功")
示例#18
0
def get_image_code():
    """获取图片验证码"""
    # 1.获取图片验证码的uuid
    code_id = request.args.get('code_id')
    print("uuid= " + code_id)
    # 2.生成验证码
    name, text, image = captcha.generate_captcha()
    print("验证码= " + text)
    # 3.验证码uuid当作key存储到redis(key,value,有效时间)
    redis_store.set('image_code_' + code_id, text,
                    constants.IMAGE_CODE_REDIS_EXPIRES)

    # 4.返回验证码图片给浏览器
    resp = make_response(image)
    # 设置响应的格式为image/jpg
    resp.headers['content_type'] = 'image/jpg'
    return resp
示例#19
0
def image_code():
    url =  request.url
    # 获取到uuid,uuid是一个唯一值
    code_id =  request.args.get('code_id')
    print("UUID = " + code_id)
    # 生成图片验证码
    # 第一个参数:表示图片验证码的名字
    # 第二个参数:表示图片验证码的内容
    # 第三个参数:表示图片验证码的图片
    name, text, image = captcha.generate_captcha()
    print("图片验证码的内容:" + text)
    # 设置redis
    redis_store.set('image_code_' + code_id,text,constants.IMAGE_CODE_REDIS_EXPIRES)
    # 返回一张图片,目前返回的是空图片
    resp = make_response(image)
    resp.headers['Content-Type'] = 'image/jpg'
    return resp
示例#20
0
def send_sms_code():
    # 1.获取参数:手机号, 图片验证码内容, 图片验证码的编号
    # params_dict = json.loads(request.data)
    params_dict = request.json
    mobile = params_dict.get("mobile")
    image_code = params_dict.get("image_code")
    image_code_id = params_dict.get("image_code_id")

    # 2.校验参数
    # 判断参数是否有值
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数有误")
    if not re.match('1[35678]\\d{9}]', mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="手机号格式不正确")
    # 3.先从redis中取出真实的验证码内容
    try:
        real_image_code = redis_store.get("ImageCodeId" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据查询失败")

    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="图片验证码已过期")
    # 4. 与用户的验证码内容对比, 如果对比不一致, 那么返回验证码输入错误
    if real_image_code.upper() != image_code.upper():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")
    # 5. 如果一致, 生成短信验证码的内容(随机数据)
    # 随机数字, 保证数字的长度为6位, 不够在前面补上0
    sms_code_str = "%06d" % random.randint(0, 999999)
    current_app.logger.debug("短信验证码内容是: %s" % sms_code_str)
    # 6. 发送短信验证码
    result = CCP().send_template_sms(
        mobile, [sms_code_str, constants.SMS_CODE_REDIS_EXPIRES])
    if result != 0:
        # 代表发送不成功
        return jsonify(errno=RET.THIRDERR, errmsg="发送短信失败")
    # 保存验证码内容到redis
    try:
        redis_store.set("SMS" + mobile, sms_code_str,
                        constants.SMS_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="数据保存失败")
    # 7. 告知发送结果
    return jsonify(errno=RET.OK, errmsg="发送成功")
示例#21
0
文件: view.py 项目: qinlinli/Project
def sms_code():
    print("请求sms_code 的url:" + request.url)

    # mobile = request.json.get("mobile")
    # image_code = request.json.get("image_code")
    # image_code_id = request.json.get("image_code_id")
    # print(image_code_id)
    # redis_image_code = redis_store.get("sms_code" +image_code_id)
    # print(redis_image_code)
    # print(image_code)
    # if not redis_image_code:
    #     return jsonify(errno = RET.NODATA,errmsg = "图片验证码过期")
    # # 随机生成验证码
    # result = random.randint(0, 999999)
    # # 保持验证码是6位
    # sms_code = "%06d" % result
    # print("短信验证码 = " + sms_code)
    # # 发送短信
    # # 第一个参数发送给哪个手机号,最多一次只能发送200个手机号,通过,分割
    # # 第二个参数是数组形式进行发送[sms_code,100],数组里面的第一个参数表示机验证码, 第二个参数表示多久过期, 单位是分钟
    # # 第三个参数表示模板id 默认值表示1
    # # statusCode = CCP().send_template_sms(mobile,[sms_code, 5],1)
    # #
    # # if statusCode != 0:
    # # return jsonify(errno = RET.THIRDERR,errmsg = "发送短信失败")
    # return jsonify(errno=RET.OK, errmsg="发送短信成功")
    mobile = request.json.get("mobile")
    image_code = request.json.get("image_code")
    image_code_id = request.json.get("image_code_id")
    print(mobile, image_code, image_code_id)

    redis_image_code_id = redis_store.get("sms_code" + image_code_id)
    print(redis_image_code_id)

    if not redis_image_code_id:
        return jsonify(errno=RET.NODATA, errmsg="验证码过期")

    if image_code.lower() != redis_image_code_id.lower():
        return jsonify(errno=RET.PARAMERR, errmsg="验证码输入错误")
    result = random.randint(0, 999999)
    sms_code = "%06d" % result
    redis_store.set("sms_code" + mobile, sms_code)
    print("短信验证码:" + sms_code)

    return jsonify(errno=RET.OK, errmsg="发送短信成功")
示例#22
0
def sms_code():
    """短信验证视图"""

    # 接受参数
    jsno_str = request.data
    # jsno_str转成字典
    json_dict = json.loads(jsno_str)

    mobile = json_dict['mobile']
    image_code = json_dict['image_code']
    image_code_id = json_dict['image_code_id']

    # 校验验证码是否齐全 手机号码格式是否正确
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='缺少参数')
    if not re.match(r'^1[345678][0-9]{9}$', mobile):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='手机号格式错误')
    try:
        image_code_server = redis_store.get('imageCode:' + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errnp=response_code.RET.DBERR, errmsg='查询图片验证码失败')
    if not image_code_server:
        return jsonify(errnp=response_code.RET.NODATA, errmsg='图片验证码不存在')

    # 跟客户端传入的图片验证码做对比
    if image_code_server.lower() != image_code.lower():
        return jsonify(errnp=response_code.RET.PARAMERR, errmsg="输入的验证码有误")

    # 生成短信验证码 不够六位补零
    sms_code = '%06d' % random.randint(0, 999999)
    print("手机验证码:" + sms_code)

    # 调用CCP()发送短信方法
    # result = CCP().send_template_sms(mobile, [sms_code, 5], 1)
    # if result != 0:
    #     return jsonify(errno=response_code.RET.THIRDERR, errmsg="发送短信失败")
    # 将短信验证码储存到redis数据库
    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=response_code.RET.DBERR, ermsg="储存短信验证码失败")

    return jsonify(errno=response_code.RET.OK, errmsg="发送短信验证码成功")
示例#23
0
def sms_code():
    # 获取到用户在页面上输入的手机号码
    mobile = request.json.get("mobile")
    # 获取到用户在页面上输入的验证码
    image_code = request.json.get("image_code")
    # 获取到验证码的id
    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("1[345678]\d{9}", mobile):
        return jsonify(errno=RET.PARAMERR, errmsg="请输入正确的手机号")

    # 从redis当中获取到图片验证码
    redis_image_code = redis_store.get("sms_code_" + image_code_id)
    # 判断验证码是否过期
    if not redis_image_code:
        return jsonify(errno=RET.NODATA, errmsg="验证码已过期")

    # 在匹配验证码的时候,需要全部转换成大写或者小写,这样是为了提高用户体验
    if redis_image_code.lower() != image_code.lower():
        return jsonify(errno=RET.PARAMERR, errrmsg="请输入正确的验证码")

    # 发送短信
    # 生成6位数字的验证码
    result = random.randint(0, 999999)
    # 保证每次获取到的验证码肯定是6位
    sms_code = "%06d" % result
    print("短信验证码 = " + sms_code)
    # 存储短信验证码到redis当中
    # 第一个参数表示redis的key
    # 第二个参数表示redis的值
    #第三个参数表示过期时间,单位是秒
    redis_store.set("code_" + mobile, sms_code, 300)

    # 发送短信验证码
    # 第一个参数表示你想发送给哪个手机号
    # 第二个参数是一个数组[sms_code,10],数组里面的第一个参数表示随机验证码,第二个参数表示过期时间,单位是分钟
    # statusCode = CCP().send_template_sms(mobile,[sms_code,10],1)
    #
    # if statusCode != 0:
    #     return jsonify(errno = RET.THIRDERR,errmsg = "发送短信失败")

    return jsonify(errno=RET.OK, errmsg="短信发送成功")
示例#24
0
def sms_code():
    """发送短信"""
    # 1.接受参数
    json_str = request.data
    json_dict = json.loads(json_str)
    mobile = json_dict.get('mobile')
    image_code_client = json_dict.get('image_code')
    image_code_id = json_dict.get('image_code_id')

    # 2.校验参数
    if not all([mobile, image_code, image_code_id]):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='缺少参数')
    if not re.match(r'^1[345678][0-9]{9}$', mobile):
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='手机号码不正确')

    # 3.查询服务器存储的图片验证码
    try:
        image_code_server = redis_store.get('ImageCode:' + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=response_code.RET.DBERR, errmsg='查询图片验证码失败')
    if not image_code_id:
        return jsonify(errno=response_code.RET.NODATA, errmsg='图片验证码不存在')
    print(image_code_server, image_code_client)
    # 4.跟客户端传入的图片验证码对比
    if image_code_server.lower() != image_code_client.lower():
        return jsonify(errno=response_code.RET.PARAMERR, errmsg='输入验证码有误')

    # 5.如果对比成功,生成短信验证码,并发送短信
    sms_code = '%06d' % random.randint(0, 999999)
    current_app.logger.debug(sms_code)
    result = CCP().send_template_sms(mobile, [sms_code, 5], 1)
    if result != 0:
        return jsonify(errno=response_code.RET.THIRDERR, errmsg='发送短信验证码失败')

    # 6.存储短信验证码到redis,方便比较时注册
    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=response_code.RET.DBERR, errmsg='保存短信验证码失败')

    # 7.响应短信验证码发送的结果
    return jsonify(errno=response_code.RET.OK, errmsg='发送短信验证码成功')
示例#25
0
def get_image_code():
    # 1.request args of id
    image_code_id = request.args.get('code_id')
    # 2.create image code content
    name, text, image_data = captcha.generate_captcha()
    # 3.save in redis
    try:
        redis_store.set('image_code_id_' + image_code_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return make_response(jsonify(error=RET.DATAERR, errmsg='保存验证码失败'))

    resp = make_response(image_data)

    resp.headers['Content-Type'] = 'image/jpg'
    # 4.return image
    return image_data
示例#26
0
def get_image_code():
    code_id = request.args.get('code_id', None)

    if not code_id:
        abort(403)
    name, text, image = captcha.generate_captcha()
    print(name, text, image)
    current_app.logger.debug("图片验证码内容是:%s" % text)
    try:
        redis_store.set("ImageCodeId_" + code_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        abort(500)
    response = make_response(image)
    # 设置数据的类型,以便浏览器更加智能识别其是什么类型
    response.headers["Content-Type"] = "image/jpg"
    return response
示例#27
0
文件: views.py 项目: Spiritjxy/INFO
def get_image_code():
    # 获取参数
    cur_id = request.args.get('cur_id')
    pre_id = request.args.get('pre_id')
    # 生成图片验证码
    name, text, image_code = captcha.generate_captcha()
    # 保存到数据库
    try:
        redis_store.set('image_code:%s' % cur_id, text, constants.IMAGE_CODE_REDIS_EXPIRES)
        if pre_id:
            redis_store.delete('image_code:%s' % pre_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='保存验证码失败')

    resp = make_response(image_code)
    resp.headers['Content-Type'] = 'image/jpg'
    return resp
示例#28
0
def imageCode():
    print(request.url)
    code_id = request.args.get("code_id")
    print(code_id)

    if not code_id:
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")
    # re1,图片验证码的名字 re2, 图片验证码的内容 re3 验证码的图片
    name, text, image = captcha.generate_captcha()
    print("图片验证码的内容---" + text)
    # 存数据到redis  para1 key, 唯一,刚好使用图片生产的uuid, 第二个是value, 第三个是过期时间
    redis_store.set("sms_code_" + code_id, text,
                    constants.SMS_CODE_REDIS_EXPIRES)

    # 初始化一个响应体
    resp = make_response(image)

    return resp
示例#29
0
def get_image_code():
    """获取图片验证码"""
    # 1. 获取前端生成图片验证码id
    code_id = request.args.get("code_id")
    # 2. 调用工具生成图片验证码
    name, text, image = captcha.generate_captcha()
    # 3. 保存图片内容到redis数据库
    try:
        redis_store.set("imageCodeId_" + code_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return make_response(jsonify(errno=RET.DBERR, errmsg="保存图片验证码失败"))

    # 4.返回数据
    response = make_response(image)
    response.headers['Content-Type'] = 'image/jpg'
    return response
示例#30
0
def get_image_code():
    # 1.获取到当前的图片编号id
    code_id = request.args.get('code_id')
    # 2.生成验证码
    name, text, image = captcha.generate_captcha()
    print(text)

    try:
        redis_store.set('ImageCode_' + code_id, text,
                        constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        return make_response(jsonify(errno=RET.DATAERR, errmsg='保存图片验证失败'))
    # 返回响应内容
    resp = make_response(image)
    # 设置内容类型
    resp.headers['Content-Type'] = 'image/jpg'
    return resp