drf篇:全局异常处理

全局异常处理(重要)

使用drf的异常处理可以捕获drf的报错信息,但是django或者原生python的报错信息也需要我们处理,这些捕获到的信息都需要我们封装好发送到前端,这是我们全局处理异常的目的。

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
# drf配置文件中,已经配置了,但是它不符合咱们的要求 # drf的配置文件:'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler', # 如果抛了异常,就会执行exception_handler函数 # 重新写一个函数,如果出了异常,执行我们的函数 # drf默认的异常处理,只处理了drf自己的异常:所有drf中抛的异常,都有detail,django的异常,抛出很长的xml数据 { "detail": "小伙子,你错了" } { code:999 msg:"小伙子,你错了" }

使用步骤

复制代码
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
# 第一步:写一个函数 from rest_framework.views import exception_handler from rest_framework.response import Response def common_exception_handler(exc, context): # 正常来讲,在这里需要记录日志---》如何在django中记录日志后面讲 # 日志记录,越详细越好:哪个用户(id,ip),在什么时间,执行哪个视图函数时报了错,请求地址是什么 # context里面有什么:{'view': <app01.views.LoginView object at 0x00000181FA935BE0>, 'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request: POST '/user/user/'>} print(context['view']) #视图类的对象 print(context['request']) #当前请求的对象----》ip,用户id,当前时间,请求地址来 view=context['view'] request=context['request'] print('ip地址为:%s的用户,访问:%s 视图类,报错了,请求地址是:%s'%(request.META.get('REMOTE_ADDR'),str(view),request.path)) response=exception_handler(exc, context) if response: # 这是drf的异常,其实人家已经处理了,但是不符合我的格式 {code:999,msg:错误} res=Response({'code':999,'msg':response.data.get('detail')}) else: # res=Response({'code':998,'msg':'服务器错误,请联系系统管理员'}) res=Response({'code':998,'msg':str(exc)}) return res # 第二步:把函数配置在配置文件中 REST_FRAMEWORK = { # 自己写的全局异常捕获 'EXCEPTION_HANDLER': 'app01.exceptions.common_exception_handler', }
posted @   马氵寿  阅读(122)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
展开