DRF框架中的异常处理程序

Posted ddzc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DRF框架中的异常处理程序相关的知识,希望对你有一定的参考价值。

DRF框架中自定义异常处理

一、自定义异常的原因

在Django和DRF框架中都封装了很多的处理异常的程序,可以处理框架内的异常问题。但是不是框架内的问题,这些处理异常的程序无法解决,例如数据库的问题等,这些就需要开发人员自定义异常来处理异常。

二、如何设置处理异常的程序

  • 在项目中创建单独的目录utils来存放处理异常的程序的文件

    开发者自己开发和封装的工具、函数、方法、类等程序文件均放在这个目录下。

  • 创建exceptions.py文件,在这个文件中编写处理异常程序的代码
    • 导入需要用到的包
      ‘‘‘python

       from rest_framework.views import exception_handler
       from rest_framework.views import Response
       from rest_framework import status 

    ‘‘‘

    • 编写异常程序处理代码
      • 在编写程序代码的时候我们需要注意:我们自定义的异常处理程序会默认覆盖掉框架封装好的处理程序,所以开发者在自定义程序的时候必须注意先让程序运行框架封装好的代码,再运行自定义异常处理程序。
      • 自定义异常处理类的类名默认为:custom_exception_handler,基本的思路是:第一步先运行框架封装的程序,如果没有问题,程序继续执行,这种结果分为两种情况:1.代码没有问题,2.代码有问题,但不是框架内处理的异常问题。第二步无论是哪种情况,代码都需要运行自定义的异常处理程序,如果出现异常终止程序并抛出异常

      ‘‘‘python

       class custom_exception_handler(exc, context):
           # exc:指的是发生异常的程序和类
           # context:发生异常的程序所处的上下文环境
           response = exception_hansler(exc, context)
           # 通过这个代码来获取框架内程序的异常结果
           if response is None:
           # 如果异常结果为空,则执行自定义异常程序
               if isinstance(exc, ZeroDivisionError):
               # isinstance(A, B)用于判断A是否属于B的实例或者子类的实例
                   print("除数不能为0")
                   return Response("服务器内部出现错误", status=status.HTTP_500_INTERNAL_SERVER_ERROR)

      ‘‘‘

  • 写好的文件需要在settings.py中进行设置

‘‘‘python

REST_FRAMEWORK = [
  'EXCEPTION_HANDLER':'utils.exceptions.custom_exception_handler',
  # 把自定义的异常处理函数添加到REST_FRAMEWORK中,value是查找路径+函数名称
]

‘‘‘

  • 创建视图函数,并为视图函数分配路由,进行程序代码的测试

以上是关于DRF框架中的异常处理程序的主要内容,如果未能解决你的问题,请参考以下文章

drf框架 2 drf框架的请求生命周期(as_view和dispatch方法), 请求解析渲染响应异常, 序列化组件 ,ORM配置回顾(media文件配置),应用在settings.py中(代码片

Django Rest Framework JWT 中的 ValidationError 不使用自定义异常处理程序

使用片段中的处理程序时出现非法状态异常

drf之异常处理

drf自定义异常处理

使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段