예제 #1
0
파일: passport.py 프로젝트: shanesl/ihome
def get_img_code():
    # 获取参数
    cur = request.args.get("cur")  # 验证码编号
    pre = request.args.get("pre")  # 上次验证码编号
    # 参数校验
    if not cur:
        return abort(403)  # 403 表示服务器拒绝访问

    # 生成图片验证码(图片+文字)
    img_name, img_text, img_bytes = captcha.generate_captcha()

    # 保存验证码文字和图片key redis 方便设置过期时间,性能也好,键值关系满足需求
    try:
        if pre:
            sr.delete("image_code_id" + pre)

        sr.set("image_code_id" + cur, img_text, ex=IMAGE_CODE_REDIS_EXPIRES)
    except BaseException as e:
        current_app.logger.error(e)  # 记录错误信息
        return abort(500)  # (服务器内部错误)服务器遇到错误,无法完成请求
    # 返回图片 自定义响应对象

    response = make_response(img_bytes)  # type:Response
    # 设置响应头
    response.content_type = "image/jpeg"
    return response
예제 #2
0
def get_image_code():
    """
    1. 获取传入的验证码编号,并编号是否有值
    2. 生成图片验证码
    3. 保存编号和其对应的图片验证码内容到redis
    4. 返回验证码图片
    :return:
    """
    # current_app.logger.error("error log")
    # 1. 获取传入的验证码编号,并编号是否有值
    args = request.args
    cur = args.get("cur")
    pre = args.get("pre")
    if not cur:
        abort(403)

    # 2. 生成图片验证码
    _, text, image = captcha.generate_captcha()
    current_app.logger.debug(text)
    # 3. 保存编号和其对应的图片验证码内容到redis
    try:
        # 删除之前保存的数据
        sr.delete("ImageCode_" + pre)
        sr.set("ImageCode_" + cur, text, constants.IMAGE_CODE_REDIS_EXPIRES)
    except Exception as e:
        current_app.logger.error(e)
        # 保存出现错误,返回JSON数据提示错误
        return jsonify(errno=RET.DBERR, errmsg="保存验证码失败")

    # 4. 返回验证码图片
    response = make_response(image)
    response.headers["Content-Type"] = "image/jpg"
    return response
예제 #3
0
def order_comment():
    """
    订单评价
    1. 获取参数
    2. 校验参数
    3. 修改模型
    :return:
    """

    # 1. 获取参数
    data_json = request.json
    order_id = data_json.get("order_id")
    comment = data_json.get("comment")

    # 2. 2. 校验参数
    if not all([order_id, comment]):
        return jsonify(errno=RET.PARAMERR, errmsg="参数错误")

    try:
        order = Order.query.filter(Order.id == order_id, Order.status == "WAIT_COMMENT").first()
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询数据错误")

    if not order:
        return jsonify(errno=RET.NODATA, errmsg="该订单不存在")

    # 3. 修改模型并且保存到数据库
    order.comment = comment
    order.status = "COMPLETE"

    try:
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="保存数据失败")

    # 删除房屋详情信息缓存
    try:
        sr.delete("house_detail_%d" % order.house_id)
    except Exception as e:
        current_app.logger.error(e)

    # 4. 返回结果
    return jsonify(errno=RET.OK, errmsg="ok")
예제 #4
0
파일: order.py 프로젝트: Swiftie92/ihome
def order_comment():
    """
    订单评价
    1. 获取参数
    2. 校验参数
    3. 修改模型
    :return:
    """

    # 1.获取参数
    param_dict = request.get_json()
    comment = param_dict.get("comment")
    order_id = param_dict.get("order_id")
    user_id = g.user_id


    # 2.校验参数
    if not comment:
        return jsonify(errno=RET.PARAMERR, errmsg="参数不足")

    # 查询订单,确保用户只能评价自己的订单并且订单处于待评价的状态
    try:
        order = Order.query.filter(Order.id == order_id, Order.user_id == user_id, Order.status == "WAIT_COMMENT").first()
        house_id = order.house_id
        # 根据订单房屋id查询房屋对象
        house = House.query.get(house_id)

    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="查询订单异常")

    if not order:
        return jsonify(errno=RET.NODATA, errmsg="订单不存在")

    # 3.修改模型

    # 保存评价信息
    order.comment = comment
    # 将订单的状态设置为已完成
    order.status = "COMPLETE"
    # 将房屋完成订单数加1
    house.order_count += 1


    # 4.保存到数据库
    try:
        db.session.add(order)
        db.session.add(house)
        db.session.commit()

    except Exception as e:
        current_app.logger.error(e)
        db.session.rollback()
        return jsonify(errno=RET.DBERR, errmsg="保存评价异常")

    # 为了在房屋详情中显示最新的评价信息,所以需要删除redis中该订单对应的房屋的信息
    try:
        sr.delete("house_info_%s" % order.house_id)

    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="删除redis中该订单对应的房屋的信息异常")

    # 5.返回
    return jsonify(errno=RET.OK, errmsg="OK")
예제 #5
0
def send_sms():
    """
    1. 接收参数并判断是否有值
    2. 校验手机号是正确
    3. 通过传入的图片编码去redis中查询真实的图片验证码内容
    4. 进行验证码内容的比对
    5. 生成发送短信的内容并发送短信
    6. redis中保存短信验证码内容
    7. 返回发送成功的响应
    :return:
    """
    # 1. 接收参数并判断是否有值
    # 取到请求值中的内容
    data = request.data
    data_dict = json.loads(data)
    mobile = data_dict.get("mobile")
    image_code = data_dict.get("image_code")
    image_code_id = data_dict.get("image_code_id")

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

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

    # 3. 通过传入的图片编码去redis中查询真实的图片验证码内容
    try:
        real_image_code = sr.get("ImageCode_" + image_code_id)
        # 如果能够取出来值,删除redis中缓存的内容
        if real_image_code:
            sr.delete("ImageCode_" + image_code_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取图片验证码失败")
    # 3.1 判断验证码是否存在,已过期
    if not real_image_code:
        return jsonify(errno=RET.NODATA, errmsg="验证码已过期")

    # 4. 进行验证码内容的比对
    if image_code.lower() != real_image_code.lower():
        return jsonify(errno=RET.DATAERR, errmsg="验证码输入错误")

    # 4.1 校验该手机是否已经注册
    try:
        user = User.query.filter_by(mobile=mobile).first()
    except Exception as e:
        user = None  # 如果查询时出现错误,也需要给user初始化,如果不初始化,会报未定义的异常
        current_app.logger.error(e)
    if user:
        return jsonify(errno=RET.DATAEXIST, errmsg="该手机已被注册")

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

    # 6. redis中保存短信验证码内容
    try:
        sr.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="保存短信验证码失败")

    # 7. 返回发送成功的响应
    return jsonify(errno=RET.OK, errmsg="发送成功")