Exemplo n.º 1
0
    def wrapper(*args, **kwargs):
        # 判断用户的登录状态
        user_id = g.user_id
        api_path = request.path
        print("api_path", user_id, api_path)

        # 判断对于用户的操作,在5秒内有没有之前的记录,如果有,则认为用户操作频繁,不接受处理
        try:
            send_flag = redis_store.get(f"user:{user_id}:path:{api_path}")
            if send_flag:
                # 表示在5秒内之前有过发送的记录
                return jsonify(code=4444, msg="请求过于频繁,请5秒后重试"), 400
        except Exception as e:
            print(e)
            return jsonify(code=4401, msg="请求出错,请10秒后重试"), 400

        # 保存访问接口数据
        try:
            redis_store.setex(f"user:{user_id}:path:{api_path}", api_limit,
                              api_path)
        except Exception as e:
            print(e)
            return jsonify(code=4402, msg="保存数据异常,请稍后在试"), 400

        return view_func(*args, **kwargs)
Exemplo n.º 2
0
def get_user_info():

    try:
        access_token = redis_store.get("access_token").decode()
        openid = redis_store.get("openid").decode()
    except Exception as e:
        return "获取通用token,id失败", 404

    res = requests.get(
        url=
        "https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN"
        % (access_token, openid))

    content = res.content.decode()

    return content, 202
Exemplo n.º 3
0
    def wrapper(*args, **kwargs):
        # 去取出access_token
        try:
            access_token = redis_store.get("wx_access_token")
        except Exception as e:
            print(e)
            return jsonify(code=4001, msg="服务异常,暂时无法使用该功能")

        # 判断access_token是否过期
        if access_token is None:

            # 调用函数去获取access_token
            access_token, expires_in = get_access_token()

            # 保存access_token到redis
            try:
                redis_store.setex("wx_access_token", expires_in, access_token)
            except Exception as e:
                print(e)
                return jsonify(code=4002, msg="服务异常,暂时无法使用该功能")

        # 如果判断access_token不是空
        if access_token is not None:
            # 将access_token保存到g对象中,在视图函数中可以通过g对象获取保存数据
            g.access_token = access_token
            return view_func(*args, **kwargs)
        else:
            # 如果access_token没有
            return jsonify(code=4003, msg="服务异常,暂时无法使用该功能")
Exemplo n.º 4
0
def check_code():
    req_json = request.get_json()
    phone = req_json.get("phone")
    sms_code = req_json.get("code")
    user_id = g.user_id

    if not all([phone, sms_code, user_id]):
        return jsonify(code=4000, msg="参数不完整"), 400

    # 从redis中取出短信验证码
    try:
        real_sms_code = redis_store.get("sms_code_%s" % phone)
    except Exception as e:
        print(e)
        return jsonify(code=4001, msg="读取真实短信验证码异常"), 400

    # 判断短信验证码是否过期
    if real_sms_code is None:
        return jsonify(code=4002, msg="短信验证码失效"), 400

    # 删除redis中的短信验证码,防止重复使用校验
    try:
        redis_store.delete("sms_code_%s" % phone)
    except Exception as e:
        print(e)

    # 判断用户填写短信验证码的正确性
    if str(real_sms_code) != str(sms_code):
        return jsonify(code=4003, msg="短信验证码错误"), 400

    # 查询当前账号
    cur_user = User.query.get(user_id)

    # 查询手机号是否被添加
    user = User.query.filter_by(phone=phone).first()
    # 如果手机号对应账号已经存在 并且不是当前账号
    if user and user.id != user_id:
        # 添加当前openid到新账号
        for uo in cur_user.user_openid:
            uo.user_id = user.id
            db.session.add(uo)

    # 其他情况就是手机号没被添加或者手机号被添加的那个对象是自己的当前账号
    else:
        # 当前账号绑定手机号
        cur_user.phone = phone
        db.session.add(cur_user)

    try:
        db.session.commit()
    except Exception as e:
        print(e)
        # 数据库操作错误后的回滚
        db.session.rollback()
        # 表示手机号出现了重复值,即手机号已注册过
        return jsonify(code=4005, msg="手机号已存在"), 400
    return jsonify({"code": 200, "msg": "绑定手机成功"})
Exemplo n.º 5
0
def get_token():
    code = redis_store.get("code").decode()
    if not code:
        return "冇token数据", 404
    res = requests.get(
        url=
        "https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&state&grant_type=authorization_code"
        % (appid, secret, code))

    content = json.loads(res.content.decode())
    #如果成功获取access token的话,就保存到reids中,顺便把用户在这个唯一的公众号的openID也保存到redis中
    access_token = content.get("access_token")
    if access_token:
        redis_store.setex("access_token", 7200, access_token)
        redis_store.setex("openid", 7200, content.get("openid"))
    else:
        return "无法保存token,%s" % content, 404

    return content, 200
Exemplo n.º 6
0
def callback():
    """
    {
    属性	类型	说明
    ToUserName	string	小程序的username
    FromUserName	string	平台推送服务UserName
    CreateTime	number	发送时间
    MsgType	string	默认为:Event
    Event	string	默认为:wxa_media_check
    isrisky	number	检测结果,0:暂未检测到风险,1:风险
    extra_info_json	string	附加信息,默认为空
    appid	string	小程序的appid
    trace_id	string	任务id
    status_code	number	默认为:0,4294966288(-1008)为链接无法下载
    }
    :return:
    """
    args_data = request.args
    signature = args_data.get("signature")
    nonce = args_data.get("nonce")
    timestamp = args_data.get("timestamp")
    token = wx_mnp_token
    if not all([signature, nonce, timestamp]):
        print("参数不完整")
        return jsonify(code=4000, msg="参数不完整")

    arr = [token, nonce, timestamp]
    arr.sort()
    temp_str = "".join(arr)
    wx_token = hashlib.sha1(temp_str.encode('utf-8')).hexdigest()

    if signature != wx_token:
        print('数据不是腾讯给的')
        return jsonify(code=4001, msg="出错")
    else:
        data = request.get_json()
        print(data, '回调参数')
        print(data.get("isrisky"))
        print(data.get("trace_id"))
        isrisky = data.get("isrisky")
        trace_id = data.get("trace_id")

        # 从redis中取出内容
        try:
            user_id_file_url_data = redis_store.get("check_img_%s" % trace_id)
        except Exception as e:
            print(e)
            return jsonify(code=4001, msg="读取异常用户id和图片redis数据异常"), 400

        # 判断否过期
        if user_id_file_url_data is None:
            return jsonify(code=4002, msg="读取异常用户id和图片redis数据异常"), 400

        try:
            redis_store.delete("check_img_%s" % trace_id)
        except Exception as e:
            print(e)

        if isrisky:
            print("图片违规")
            pass
        else:
            user_id_file_url_data = json.loads(user_id_file_url_data)
            print(user_id_file_url_data, 'redis参数')
            user_id = user_id_file_url_data.get('user_id')
            file_url = user_id_file_url_data.get('file_url')
            print(user_id)
            print(file_url)
            if save_file_url_to_mysql_is_ok(user_id=user_id, file_url=file_url):
                print("成功储存")
                return jsonify(code=200, msg="成功储存")

        return jsonify(code=200, msg="接收到数据")
 def _get_ip_count(self, redis_store):
     ip = redis_store.keys()[0]
     count = int(redis_store.get(ip))
     return count
Exemplo n.º 8
0
from scripts.bot import TwitterBot
from scripts.twitter_client import get_twitter_client
from config import logger, redis_store
from time import sleep
from scripts.utils import load_models

if __name__ == "__main__":
    api = get_twitter_client()
    since_id = redis_store.get('since_id')
    if not since_id:
        since_id = 1
    else:
        since_id = int(since_id)
    the_models = load_models()
    while True:
        the_bot = TwitterBot(api, since_id, the_models)
        since_id = the_bot.check_mentions()
        redis_store.set('since_id', since_id)
        logger.info(f"Waiting...", )
        sleep(60)
def get_redis_count(request):
    return redis_store.get(request.remote_addr)
def get_in_redis(user_id):
    return json.loads(redis_store.get(user_id))