from functools import wraps import time from flask import request, g, jsonify, make_response,current_app from common.log import logger from datetime import datetime from common import utils,redis_helper # 定义生成失败响应的函数 def fail_response(code, error_message): return { "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3], "result": { "status": "failed", "code": code, "message": error_message } } # 定义生成成功响应的函数 def success_response(data): return { "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3], "data": data, "result": { "status": "succeed", "code": 200, "message": "请求成功!" } } def before_request(): logger.info(f"请求: {request.method} {request.url} ") g.start_time = time.time() def after_request(response): elapsed_time = time.time() - g.start_time logger.info(f'响应: 用了 {elapsed_time:.4f} 秒') # return response if response.status_code >= 400: # 失败响应 error_message = response.get_json(silent=True)['message'] json_response = make_response(jsonify(fail_response(response.status_code, error_message)), response.status_code) else: # 成功响应 data = response.get_json(silent=True) json_response = make_response(jsonify(success_response(data)), response.status_code) json_response.headers['X-Processed-Time'] = g.get('start_time', 'unknown') return json_response def handle_exception(error): logger.error(f'发生异常: {error}') # response = jsonify({'error': str(error)}) response = jsonify({'message': str(error)}) response.status_code = 500 return response def auth_required_time(f): @wraps(f) def decorated_function(*args, **kwargs): req = request.get_json() wxid = req.get("wxid") if not wxid: response=jsonify({'code': 400, 'message': '缺少wxid参数'}) response.status_code = 400 return response k, login_info = utils.get_login_info_by_wxid(wxid) if not login_info or login_info.get('status') == "0": response=jsonify({'code': 401, 'message': '用户没有登录'}) response.status_code = 401 return response # 获取登录信息的创建时间 creation_timestamp=int(login_info.get('create_at')) current_timestamp = time.time() three_days_seconds = 3 * 24 * 60 * 60 # 三天的秒数 diff_flag=(current_timestamp - creation_timestamp) >= three_days_seconds print(f"creation_timestamp:{creation_timestamp},current_timestamp:{current_timestamp},diff_flag:{diff_flag}") if not diff_flag: response=jsonify({'code': 401, 'message': '用户创建不够三天,不能使用该功能'}) response.status_code = 401 return response # # # 将认证信息注入请求环境变量 request.environ['token_id'] = login_info.get('tokenId') request.environ['app_id'] = login_info.get('appId') return f(*args, **kwargs) return decorated_function