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)
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
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="服务异常,暂时无法使用该功能")
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": "绑定手机成功"})
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
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
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))