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. oracle函数 CONVERT(c1,set1,set2)

    [功能]将源字符串c1 从一个语言字符集set2转换到另一个目的set1字符集 [参数]c1,字符串,set1,set2为字符型参数 [返回]字符串 [示例] select convert('stru ...

  2. oracle函数 ROWIDTOCHAR(rowid)

    [功能]转换rowid值为varchar2类型 [参数]rowid,固定参数 [返回]返回长度为18的字符串 [示例] SELECT ROWIDTOCHAR(rowid) FROM DUAL; [说明 ...

  3. Java练习 SDUT-1588_圆的面积

    圆的面积 Time Limit: 1000 ms Memory Limit: 32768 KiB Problem Description Give you the radius of a circle ...

  4. Export与import命令

    模块功能主要由两个命令构成:export和import. export命令用于用户自定义模块,规定对外接口: import命令用于输入其他模块提供的功能,同时创造命名空间(namespace),防止函 ...

  5. OpenStack☞网关协议

    一 动态页面与静态页面区别 静态页面:每一个网页都有一个固定的URL,且网页的URL以.html..htm..shtml等常见的形式为后缀. 网页内容已经发布到网站服务器上,无论是否有用户访问,每个静 ...

  6. selenium webdriver学习(八)------------如何操作select下拉框(转)

    selenium webdriver学习(八)------------如何操作select下拉框 博客分类: Selenium-webdriver   下面我们来看一下selenium webdriv ...

  7. 【codeforces 520B】Two Buttons

    [题目链接]:http://codeforces.com/contest/520/problem/B [题意] 给你一个数n; 对它进行乘2操作,或者是-1操作; 然后问你到达m需要的步骤数; [题解 ...

  8. Python--day67--CBV和FBV、Request对象及上传文件示例

    1,CBV版添加新的出版社 views.py文件 urls.py文件 2,Request对象: request对象 当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpReques ...

  9. Codeforces Round #597 (Div. 2) D. Shichikuji and Power Grid 题解 最小生成树

    题目链接:https://codeforces.com/contest/1245/problem/D 题目大意: 平面上有n座城市,第i座城市的坐标是 \(x[i], y[i]\) , 你现在要给n城 ...

  10. Notice: Use of undefined constant - assumed ' '

    昨天看手册的时候有两个范例,懒得写了,直接复制,测试一下,结果报Notice; 反复检查无果,最后, 手动敲了一遍,居然正常了,汗.... 总结:偷懒害人