博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DRF之异常处理组件
阅读量:3961 次
发布时间:2019-05-24

本文共 2060 字,大约阅读时间需要 6 分钟。

一. 异常处理 Exceptions

看一个简单的示例

class APIError(Exception):    passclass Student2APIView(APIView):    def get(self,request,pk):        try:            instance = Student.objects.get(pk=pk)        except Student.DoesNotExist:            raise APIError('自定义API错误')            return Response({
"message":"访问的商品已经下架~"}) serializer = StudentModelSerializer(instance=instance) return Response(serializer.data)

REST framework提供了异常处理,我们可以自定义异常处理函数。

可以创建一个utils文件夹,里面放一个exceptions.py文件,名字随便写,然后写下面的内容

from rest_framework.views import exception_handlerdef custom_exception_handler(exc, context): #自定义的错误处理函数  	”“”    	exc错误对象      context 异常发生时的一些上下文信息    “”“    # 先调用REST framework默认的异常处理方法获得标准错误响应对象    response = exception_handler(exc, context) #这个函数是drf提供的,它处理了一些错误,但是如果它处理不了的,它会返回None,所以,如果是None的话,我们需要自己来处理错误    # 在此处补充自定义的异常处理    if response is None:      	if isinstance(exc,APIError)        #这里就可以记录错误信息了,一般记录到文件中,可以使用日志系统来进行记录        # return Respose({'msg':'自定义API错误了'})        response.data['status_code'] = response.status_code    return response

在配置文件中还要声明自定义的异常处理

REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'my_project.my_app.utils.custom_exception_handler'}

如果未声明,会采用默认的方式,如下

rest_frame/settings.py

REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'rest_framework.views.exception_handler'}

例如:

补充上处理关于数据库的异常

from rest_framework.views import exception_handler as drf_exception_handlerfrom rest_framework import statusfrom django.db import DatabaseErrordef exception_handler(exc, context):    response = drf_exception_handler(exc, context)    if response is None:        view = context['view'] #出错的方法或者函数名称        if isinstance(exc, DatabaseError):            print('[%s]: %s' % (view, exc))            response = Response({
'detail': '服务器内部错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) return response

REST framework定义的异常

  • APIException 所有异常的父类
  • ParseError 解析错误
  • AuthenticationFailed 认证失败
  • NotAuthenticated 尚未认证
  • PermissionDenied 权限决绝
  • NotFound 未找到
  • MethodNotAllowed 请求方式不支持
  • NotAcceptable 要获取的数据格式不支持
  • Throttled 超过限流次数
  • ValidationError 校验失败

转载地址:http://ogqzi.baihongyu.com/

你可能感兴趣的文章
jsp 2.0标记文件
查看>>
Hibernate中Criteria的完整用法
查看>>
sql jsp
查看>>
spring beans beanfactory applicationcontext
查看>>
使用ORM工具进行数据访问
查看>>
使用ORM工具进行数据访问
查看>>
编译与部署Eclipse+Tomcat+MySQL+Liferay4.1.2
查看>>
POJ3728,The merchant(倍增LCA+分治)
查看>>
2019 ICPC Malaysia National,E. Optimal Slots(01背包变形)
查看>>
洛谷P1638 逛画展(双向队列)
查看>>
POJ2892,Tunnel Warfare(线段树维护连续区间)
查看>>
POJ3468,A Simple Problem with Integers(线段树-区间查询-区间更新)
查看>>
杭电ACM——6463(思维)
查看>>
杭电ACM——1061,Rightmost Digit(思维)
查看>>
杭电ACM——1087,Super Jumping! Jumping! Jumping!(DP)
查看>>
杭电ACM——fatmouse's speed(DP)
查看>>
杭电ACM——毛毛虫(DP)
查看>>
杭电ACM——humble numbers(DP)
查看>>
杭电ACM——6467,简单数学题(思维)
查看>>
杭电ACM——天上掉馅饼(DP)
查看>>