api_route.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from flask import jsonify
  2. from functools import wraps
  3. from tools.api_response import APIResponse
  4. def route(bp, *args, **kwargs):
  5. # 路由设置,统一返回格式
  6. # :param bp: 蓝图
  7. # :param args:
  8. # :param kwargs:
  9. # :return:
  10. kwargs.setdefault('strict_slashes', False)
  11. def decorator(f):
  12. @bp.route(*args, **kwargs)
  13. @wraps(f)
  14. def wrapper(*args, **kwargs):
  15. result = f(*args, **kwargs)
  16. base = APIResponse(result)
  17. rv = base.body()
  18. # 响应函数返回整数和浮点型
  19. if isinstance(rv, (int, float, str)):
  20. return jsonify(rv)
  21. # 响应函数返回元组
  22. elif isinstance(rv, tuple):
  23. # 判断是否为多个参数
  24. if len(rv) >= 3:
  25. return jsonify(rv[0]), rv[1], rv[2]
  26. else:
  27. return jsonify(rv[0]), rv[1]
  28. # 响应函数返回字典
  29. elif isinstance(rv, dict):
  30. return jsonify(rv)
  31. # 响应函数返回字节
  32. elif isinstance(rv, bytes):
  33. rv = rv.decode('utf-8')
  34. return jsonify(rv)
  35. else:
  36. return jsonify(rv)
  37. return f
  38. return decorator