• drf—— 全局异常


    一、全局异常捕获

    1 统一接口的返回方式,即便视图函数执行出错,也能捕获异常
    2 使用方式
    -写一个函数 from rest_framework import status from rest_framework.views import exception_handler from rest_framework.response import Response from django.db import DatabaseError def common_exception_handler(exc, context): response = exception_handler(exc, context) # 在此处补充自定义的异常处理 (可以省略if...elif...else内容,只写一个response=。。。) if response is None: view = context['view'] print('[%s]: %s' % (view, exc)) if isinstance(exc, DatabaseError): response = Response({'code':101,'detail': '数据库错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) elif isinstance(exc,ZeroDivisionError): response = Response({'code':102,'detail': '除以0的错误'}, status=status.HTTP_507_INSUFFICIENT_STORAGE) else: response = Response({'code':999,'detail': '未知错误'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) return response
    -在setting中配置 REST_FRAMEWORK = { 'EXCEPTION_HANDLER':'app01.utils.common_exception_handler' }

    二、错误日志

    def common_exception_handler(exc, context):
        response = exception_handler(exc, context)
        if response is None:
            # 错误信息记录日志
            # <app01.views.StudentApiView object at 0x0000015D4DD44700>, 'args': (), 'kwargs': {}, 'request': <rest_framework.request.Request: GET '/student_apiview/'>}
            print(context['view'])  # 哪个视图函数出错
            view = context['view']
            request = context['request']
            print(context['request'])  # 当此请求的request对象
            print(str(view))
            print(request.path)
            print(request.method)
            print(request.META.get('REMOTE_ADDR'))
            # 记录日志(django日志)
            # sentry
            # print('执行视图函数出错,用户请求的地址是:%s,用户的ip是%s'%(request.path,request['META']['REMOTE_ADDR']))
            response = Response({'code': 999, 'detail': str(exc)}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
        return response

    三、利用sentry记录错误日志

    原理:
    Sentry 是一个实时的事件日志和聚合平台,基于 Django 构建。 Sentry 可以帮助你将 Python 程序的所有 exception 自动记录下来,然后在一个好用的 UI 上呈现和搜索。

    错误日志记录平台,异步操作,它跟语言无关,无论是go java 还是python等项目,写个接口连接过去,出了异常,
    就会通过网络异步的把错误信息记录到sentry中,还有异常告警等功能,这样很方便。

    具体使用:需要安装模块相对复杂,这里不具体说了,可以百度。
  • 相关阅读:
    ABAP 更改DN外向交货单
    ABAP 参照SO item 创建DN
    ABAP 获取客户供应商的电话,地址,email等相关信息
    ABAP 自定义的ALV导出excel按钮,导出ALV内表中其中某几列的数据
    ABAP 后台JOB布置例子
    ABAP 选择屏幕字段动态隐藏和显示
    ABAP 选择屏幕上的导入模板下载按钮
    ABAP 选择屏幕文件导入时,单元格超50字符怎么处理
    ABAP 选择屏幕字段动态隐藏和显示
    人脸检测数据集
  • 原文地址:https://www.cnblogs.com/guojieying/p/13963800.html
Copyright © 2020-2023  润新知