response.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # coding:utf-8
  2. import logging
  3. import json
  4. from django.conf import settings
  5. from django.http.response import JsonResponse, HttpResponse
  6. from rest_framework.response import Response
  7. from rest_framework.exceptions import ErrorDetail
  8. from django.utils.deprecation import MiddlewareMixin
  9. logger = logging.getLogger('myapp') # 获取自定义日志器
  10. class ResponseMiddleware:
  11. def __init__(self, get_response):
  12. self.get_response = get_response
  13. def __call__(self, request):
  14. response = self.get_response(request)
  15. if isinstance(response, JsonResponse):
  16. return response
  17. status_code = response.status_code
  18. rsp_data = response.data
  19. if status_code == 200:
  20. if not rsp_data:
  21. rsp_data = {}
  22. data = rsp_data
  23. if 'page_size' not in rsp_data:
  24. data = {'items': rsp_data}
  25. response = JsonResponse(status=status_code, data={
  26. 'msg': '成功',
  27. 'code': 0,
  28. 'data': data
  29. })
  30. elif 400 <= status_code < 500:
  31. if status_code in [403, 401]:
  32. response = JsonResponse(
  33. status=200,
  34. data={
  35. 'msg': "无权限访问",
  36. 'code': 403,
  37. 'data': {}
  38. }
  39. )
  40. elif status_code == 404:
  41. response = JsonResponse(
  42. status=200,
  43. data={
  44. 'msg': "数据不存在",
  45. 'code': 400,
  46. 'data': {}
  47. })
  48. elif isinstance(rsp_data, dict):
  49. if 'msg' in rsp_data:
  50. response = JsonResponse(
  51. status=200,
  52. data={
  53. 'msg': rsp_data['msg'],
  54. 'code': 400,
  55. 'data': {}
  56. })
  57. else:
  58. response = JsonResponse(
  59. status=200,
  60. data={
  61. 'msg': '其它错误',
  62. 'code': 400,
  63. 'data': {}
  64. })
  65. return response