Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

56 lines
1.7KB

  1. import time
  2. from flask import request, g, jsonify, make_response,current_app
  3. from common.log import logger
  4. from datetime import datetime
  5. # 定义生成失败响应的函数
  6. def fail_response(code, error_message):
  7. return {
  8. "Timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],
  9. "Result": {
  10. "Status": "failed",
  11. "Code": code,
  12. "Message": error_message
  13. }
  14. }
  15. # 定义生成成功响应的函数
  16. def success_response(data):
  17. return {
  18. "Timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3],
  19. "Data": data,
  20. "Result": {
  21. "Status": "succeed",
  22. "Code": 200,
  23. "Message": "请求成功!"
  24. }
  25. }
  26. def before_request():
  27. logger.info(f"请求: {request.method} {request.url} ")
  28. g.start_time = time.time()
  29. def after_request(response):
  30. elapsed_time = time.time() - g.start_time
  31. logger.info(f'响应: 用了 {elapsed_time:.4f} 秒')
  32. # return response
  33. if response.status_code >= 400:
  34. # 失败响应
  35. error_message = response.get_json(silent=True)['message']
  36. json_response = make_response(jsonify(fail_response(response.status_code, error_message)), response.status_code)
  37. else:
  38. # 成功响应
  39. data = response.get_json(silent=True)
  40. json_response = make_response(jsonify(success_response(data)), response.status_code)
  41. json_response.headers['X-Processed-Time'] = g.get('start_time', 'unknown')
  42. return json_response
  43. def handle_exception(error):
  44. logger.error(f'发生异常: {error}')
  45. # response = jsonify({'error': str(error)})
  46. response = jsonify({'message': str(error)})
  47. response.status_code = 500
  48. return response