码迷,mamicode.com
首页 > 其他好文 > 详细

DRF框架中的异常处理程序

时间:2019-12-29 12:49:42      阅读:88      评论:0      收藏:0      [点我收藏+]

标签:import   上下文环境   print   instance   django   问题   注意   and   判断   

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框架中的异常处理程序

标签:import   上下文环境   print   instance   django   问题   注意   and   判断   

原文地址:https://www.cnblogs.com/ddzc/p/12114526.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!