首页 > 其他分享 >【7.0】封装全局异常

【7.0】封装全局异常

时间:2023-08-19 17:12:56浏览次数:27  
标签:封装 异常 7.0 common str res 全局 data view

【一】封装全局异常

  • utils/common_exceptions.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
from utils.common_logger import logger


#### 加入日志记录,只要走到这,说明程序出error了,程序的error,咱们都要记录日志,方便后期排查
### 日志记录尽量详细:ip;如果用户登录了,记录用户;请求地址是;执行那个视图类出的错
def common_exception_handler(exc, context):
    request = context.get('request')
    view = context.get('view')
    ip = request.META.get('REMOTE_ADDR')
    try:
        user_id = request.user.pk
    except:
        user_id = '【未登录用户】'
    path = request.get_full_path()
    view_str = str(view)
    res = exception_handler(exc, context)
    logger.error('用户地址为:%s,用户id号为:%s,请求地址为:%s,执行的视图函数为:%s,错误是什么:%s' % (ip, user_id, path, view_str,str(exc)))

    if res:
        # drf的异常,一种是从res.data这个字典的detail中取,一种是  直接取data
        if isinstance(res.data, dict):
            data = {'code': 999, 'msg': res.data.get('detail', '系统错误,请联系系统管理员')}
        else:
            data = {'code': 998, 'msg': res.data}

    else:
        # django的异常
        data = {'code': 888, 'msg': str(exc)}
    return Response(data)

【二】配置文件配置


REST_FRAMEWORK = {
    'EXCEPTION_HANDLER': 'utils.common_exceptions.common_exception_handler',
}

【三】测试异常

  • 配置相应视图和路由
# Django 异常
raise Exception("Django 异常")

# 普通异常
a = [9, 8]
print(a[10])

# DRF异常
raise ValidationError("DRF异常")

标签:封装,异常,7.0,common,str,res,全局,data,view
From: https://www.cnblogs.com/dream-ze/p/17642700.html

相关文章

  • 【6.0】封装logger
    【一】引入在项目运行过程中,日志起着非常重要的作用。它可以记录程序的运行状态、错误信息、警告以及程序员的输出,从而帮助我们更好地观察和分析项目的运行情况。因此,在每个项目中,都需要配置相应的日志记录功能。【二】日志的作用记录程序运行过程中的错误和异常:日志可......
  • react项目搭建-路由封装
    routerv6路由统一管理与添加,对是否登录进行判断。1.使用脚手架创建项目新建一个文件夹,在文件夹内部打开命令行工具。执行命令:npxcreate-react-app项目名字将项目放在开发工具中,打开项目终端运行项目(npmstart/yarnstart)注:npx命令会帮助我们临时安装create-react-ap......
  • 面向对象开发的封装
    封装被定义为"把一个或多个项目封闭在一个物理的或者逻辑的包中"。在面向对象程序设计方法论中,封装是为了防止对实现细节的访问。抽象和封装是面向对象程序设计的相关特性。抽象允许相关信息可视化,封装则使程序员实现所需级别的抽象。封装使用 访问修饰符 来实现。一个 访问......
  • 全局异常过滤器
    在ASP.NETCore中,可以使用异常过滤器(ExceptionFilter)来捕获和处理应用程序中的异常。IExceptionFilter接口和IAsyncExceptionFilter接口都可以用来实现自定义的异常过滤器。首先,在WebApi中创建一个名为CustomExceptionFilter的实体类 在这个示例中,我们创建了一个名为......
  • C语言多文件编程中全局变量的声明与定义会遇到的问题
    C语言多文件编程中全局变量的声明与定义会遇到的问题目录C语言多文件编程中全局变量的声明与定义会遇到的问题描述:1.创建3个文件,分别是main.c、test.h、test.c,具体代码如下:1.1.1test.h1.1.2test.h1.1.3main.c1.1.4这样能直接编译通过。2.创建3个文件,分别是main.c、test.h、te......
  • 面向对象——封装
    什么是封装    面向对象编程是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码......
  • 【springMVC】全局json序列化配置
    1.概述现在我们进行web开发,一般都要设计成RESTful风格的API,通过json格式的数据进行交互。但是前端传入的json数据如何被解析成Java对象作为API入参,后端返回结果又如何将Java对象解析成json格式数据返回给前端,在整个数据流转过程中,这是由谁来完成的呢?2.HttpMessageConve......
  • 笔记整理--C语言--失落的C语言结构体封装艺术 - 博客 - 伯乐在线——转载
    失落的C语言结构体封装艺术-博客-伯乐在线转载1.谁该阅读这篇文章本文是关于削减C语言程序内存占用空间的一项技术——为了减小内存大小而手工重新封装C结构体声明。你需要基本的C语言的基本知识来读懂本文。如果你要为内存有限制的嵌入式系统、或者操作系统内核写代码,那......
  • postman进行环境变量设置,全局变量设置 pm.response.json()
    环境变量的设置在开发和测试的过程中,经常在开发环境,测试环境,生产环境来回切换,这样每次都要修改域名很麻烦,好在postman提供了可以切换环境更改域名的方法,这样只要配置好环境变量就可以切换域名了。具体操作步骤如下:1.点击postman右上角眼镜的图标2.点击“Add”按钮3.填写域......
  • 企业内容建站系统 ModStartCMS v7.0.0 多语言开发优化,多个常用组件升级
    ModStart是一个基于Laravel模块化极速开发框架。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。系统完全开源,基于Apache2.0开源协议,免费且不限制商业使用。功能特性丰富的模块市场,后台一键快速安装会员模块通用且完整,支持完整的API调用大......