DRF框架中的异常处理程序
DRF框架中自定义异常处理
一、自定义异常的原因
在Django和DRF框架中都封装了很多的处理异常的程序,可以处理框架内的异常问题。但是不是框架内的问题,这些处理异常的程序无法解决,例如数据库的问题等,这些就需要开发人员自定义异常来处理异常。
二、如何设置处理异常的程序
在项目中创建单独的目录utils来存放处理异常的程序的文件
开发者自己开发和封装的工具、函数、方法、类等程序文件均放在这个目录下。
创建exceptions.py文件,在这个文件中编写处理异常程序的代码
导入需要用到的包
'''pythonfrom 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框架中csrf异常
一.报错信息 "detail": "CSRF Failed: CSRF cookie not set." 二.解决办法 方法一: 在配置文件中配置 REST_F ...
- drf框架中认证与权限工作原理及设置
0909自我总结 drf框架中认证与权限工作原理及设置 一.概述 1.认证 工作原理 返回None => 游客 返回user,auth => 登录用户 抛出异常 => 非法用户 前台 ...
- drf框架中jwt认证,以及自定义jwt认证
0909自我总结 drf框架中jwt 一.模块的安装 官方:http://getblimp.github.io/django-rest-framework-jwt/ 他是个第三方的开源项目 安装:pi ...
- django drf框架中的user验证以及JWT拓展的介绍
登录注册是几乎所有网站都需要去做的接口,而说到登录,自然也就涉及到验证以及用户登录状态保存,最近用DRF在做的一个关于网上商城的项目中,引入了一个拓展DRF JWT,专门用于做验证和用户状态保存.这个 ...
- drf框架中所有视图及用法
0909自我总结 drf框架中所有视图及用法 一.drf框架中的所有视图类 from django.views import View from rest_framework import views ...
- drf框架中分页组件
drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...
- DRF框架中链表数据通过ModelSerializer深度查询方法汇总
DRF框架中链表数据通过ModelSerializer深度查询方法汇总 一.准备测试和理解准备 创建类 class Test1(models.Model): id = models.IntegerFi ...
- DRF框架中分页功能接口
目录 DRF框架中分页功能接口 DRF框架中分页功能接口 一.在框架中提供来三个类来实现分页功能,PageNumberPagination.LimitOffsetPagination.CursorPa ...
- SpringMVC框架中的异常解析器-ExceptionHandler和HandlerExceptionResolver
SpringMVC框架中,处理异常还是挺方便的,提供了一个异常解析器. 处理局部异常 @Controller public class AccessController { /** * 处理这个Con ...
随机推荐
- SaaS加速器II 能力中心:互利互补 共享商业红利
摘要: 通过丰富的阿里集团和三方的业务能力API,缩短业务从0-1构建的周期和降低成本,我们希望能够把阿里巴巴在电商.金融.物流.高德以及其他领域沉淀出来商业最佳实践.商业能力,通过阿里云的渠道输出, ...
- oracle函数 add_months(d1,n1)
[功能]:返回在日期d1基础上再加n1个月后新的日期. [参数]:d1,日期型,n1数字型 [返回]:日期
- Project Euler Problem 26-Reciprocal cycles
看样子,51nod 1035 最长的循环节 这道题应该是从pe搬过去的. 详解见论文的(二)那部分:http://web.math.sinica.edu.tw/math_media/d253/2531 ...
- ng-model 将时间戳转换为标准时间
html部分 <div class="form-group loginCon1"> <label class="col-sm-2 control-l ...
- better-scroll在移动端绑定click事件失效
在做一个列表的时候需要点击列表将列表信息输出,给<li>加个一个很简单的@click,可是没有反应. 原因是使用了better-scroll,默认它会阻止touch事件.所以在配置中需要加 ...
- [C#] 汉字转拼音,支持多音字
这份代码大概不是严格意义上正确的,但是一般场景用用应该没问题. using System; using System.Collections.Generic; using System.Linq; u ...
- 在SuperSocket中启用TLS/SSL传输层加密
关键字: TLS, SSL, 传输层加密, 传输层安全, 证书使用, X509Certificate SuperSocket 支持传输层加密(TLS/SSL) SuperSocket 有自动的对TLS ...
- Python--day61--Django ORM单表操作之展示用户列表
user_list.html views.py 项目的urls.py文件
- docker swarm搭建tidb踩坑日记
背景 公司新项目数据量翻了一倍,每天上亿数据量的读写,传统的单库单表已经满足不了目前的需求,得考虑下分布式存储了.那用啥呢,之前有考虑用到mycat,但是一进官网,一股山寨气息扑面而来,技术群进群还收 ...
- [转]java常用正则表达式
只能输入数字:"^[0-9]*$". 只能输入n位的数字:"^\d{n}$". 只能输入至少n位的数字:"^\d{n,}$". 只能输 ...