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框架中的异常处理程序的更多相关文章

  1. DRF框架中csrf异常

    一.报错信息 "detail": "CSRF Failed: CSRF cookie not set." 二.解决办法 方法一: 在配置文件中配置 REST_F ...

  2. drf框架中认证与权限工作原理及设置

    0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...

  3. drf框架中jwt认证,以及自定义jwt认证

    0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...

  4. django drf框架中的user验证以及JWT拓展的介绍

    登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...

  5. drf框架中所有视图及用法

    0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views ...

  6. drf框架中分页组件

    drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...

  7. DRF框架中链表数据通过ModelSerializer深度查询方法汇总

    DRF框架中链表数据通过ModelSerializer深度查询方法汇总 一.准备测试和理解准备 创建类 class Test1(models.Model): id = models.IntegerFi ...

  8. DRF框架中分页功能接口

    目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...

  9. SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver

    SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...

随机推荐

  1. 查看JAVA占用CPU高的线程日志

    # . 查看主进程占用cpu高 top # java # . 按照线程占用cpu由高到低进行排查: -o THREAD,tid, # USER %CPU PRI SCNT WCHAN USER SYS ...

  2. oracle选择最有效率的表名顺序

    ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中写在最后的表(基础表 driving table)将被最先处理. 在FROM子句中包含多个表的情况下,你必须选择记录条 ...

  3. oracle函数 SESSIONTIMEZONE

    [功能]:返回会话时区 [参数]:没有参数,没有括号 [返回]:字符型 [示例]select dbtimezone,SESSIONTIMEZONE from dual; 返回:+00:00   +08 ...

  4. vue 后期追回的属性不更新视图问题

    this.$set(this.problemList[index], 'sub', [])   因为原始数组是有set,get而追加的没有,所以需要用这种方式   // 添加 this.$set(th ...

  5. laravel5.6 QQ 第三方登录

    https://socialiteproviders.github.io/providers/qq.html 1. Installation // This assumes that you have ...

  6. [ Laravel 5.6 文档 ] 安全系列 —— 重置密码

    http://laravelacademy.org/post/8929.html 简介 想要快速实现该功能?只需要在新安装的 Laravel 应用下运行 php artisan make:auth(如 ...

  7. spark sql thrift server

    ### create data ## cat ## echo "$(date ;echo ## cat }'";exit}' ..} do passwd) echo "$ ...

  8. java的System.currentTimeMillis()如何转换成C#的DateTime.Now.Ticks?

    考虑到我们是东八时区的话,应做如下转换: long milli = System.currentTimeMillis() + 8*3600*1000; long ticks = (milli*1000 ...

  9. jQuery+css3实现极具创意的罗盘旋转时钟效果源码

    效果 HTML代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  10. HDU 1236

    水题~~但我做了很久: 题意:是中国人都懂了 思路:结构体排序: 以后要多用用重定义的排序手段,!!!!!多用!!多用!!多用!! #include<iostream> #include& ...