zoukankan      html  css  js  c++  java
  • 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中,还有异常告警等功能,这样很方便。

    具体使用:需要安装模块相对复杂,这里不具体说了,可以百度。
  • 相关阅读:
    乱谈B2C系统算是今年的总结吧
    浅谈领域模型驱动中表的设计方法
    作业调度小软件
    使用Mutex实现会话状态下单实例运行和系统范围内单实例运行
    几种特殊的类型设计。
    XCommunity权限控制和配置体系
    某个最近不知道为啥很火的小题目的LINQ实现
    C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究
    好吧,不得不说说这篇在首页恶心人的文章
    “九种不够面向对象的对象“的在实际项目中的合理运用
  • 原文地址:https://www.cnblogs.com/guojieying/p/13963800.html
Copyright © 2011-2022 走看看