Django 如何全局捕获异常和DEBUG

DEBUG

默认:False

一个开启、关闭调试模式的布尔值。

永远不要在 DEBUG 开启的情况下将网站部署到生产中。

调试模式的主要功能之一是显示详细的错误页面。如果你的应用程序在 DEBUG 为 True 时引发了异常,Django 会显示一个详细的回溯,包括很多关于你的环境的元数据,比如所有当前定义的 Django 配置(来自 settings.py)。

视图抛出异常

Django 和 Django-rest-framework 中视图最终都是集成 class APIView(View),从 APIView 中查看,所有的请求都是通过 dispatch 这个方法分发:

def dispatch(self, request, *args, **kwargs):"""`.dispatch()` is pretty much the same as Django's regular dispatch,but with extra hooks for startup, finalize, and exception handling."""self.args = argsself.kwargs = kwargsrequest = self.initialize_request(request, *args, **kwargs)self.request = requestself.headers = self.default_response_headers  # deprecate?try:self.initial(request, *args, **kwargs)# Get the appropriate handler methodif request.method.lower() in self.http_method_names:handler = getattr(self, request.method.lower(),self.http_method_not_allowed)else:handler = self.http_method_not_allowedresponse = handler(request, *args, **kwargs)except Exception as exc:response = self.handle_exception(exc)   # 抛出异常self.response = self.finalize_response(request, response, *args, **kwargs)return self.response

response = self.handle_exception(exc) 中:

    def handle_exception(self, exc):"""Handle any exception that occurs, by returning an appropriate response,or re-raising the error."""if isinstance(exc, (exceptions.NotAuthenticated,exceptions.AuthenticationFailed)):# WWW-Authenticate header for 401 responses, else coerce to 403auth_header = self.get_authenticate_header(self.request)if auth_header:exc.auth_header = auth_headerelse:exc.status_code = status.HTTP_403_FORBIDDENexception_handler = self.get_exception_handler()context = self.get_exception_handler_context()response = exception_handler(exc, context)if response is None:self.raise_uncaught_exception(exc)  # 异常部分response.exception = Truereturn response

self.raise_uncaught_exception(exc) 中:
会通过 DEBUG 判读是否是开发模式,如果是开发模式通过 request 包装器返回,如果不是会重新抛出最近的异常。

    def raise_uncaught_exception(self, exc):if settings.DEBUG:request = self.requestrenderer_format = getattr(request.accepted_renderer, 'format')use_plaintext_traceback = renderer_format not in ('html', 'api', 'admin')request.force_plaintext_errors(use_plaintext_traceback)raise  # 重新抛出最近的异常

全局捕获

视图抛出异常之后,怎么处理异常,如果不处理前端会抛出一个显示详细的错误页面。如果你的应用程序在 DEBUG 为 True 时引发了异常,Django 会显示一个详细的回溯,包括很多关于你的环境的元数据,比如所有当前定义的 Django 配置,暴露太多内容,对网站会非常不安全。解决办法,定义一个全局的异常捕获,如果有异常,这返回一个可视化的信息给起前端。

class AppExceptionMiddleware(MiddlewareMixin):def process_exception(self, request, exception):self.exception = exceptionself.request = request# 用户自我感知的异常抛出if isinstance(exception, BlueException):logger.log(exception.LOG_LEVEL,(u"""捕获主动抛出异常, 具体异常堆栈->[%s] status_code->[%s] & """u"""client_message->[%s] & args->[%s] """) % (traceback.format_exc(),exception.ERROR_CODE,exception.message,exception.args))response = JsonResponse(exception.response_data())response.status_code = exception.STATUS_CODEreturn responseresponse = JsonResponse({"result": False,'code': "50000",'message': _(u"系统异常,请联系管理员处理"),'data': None})response.status_code = 500# notify sentryif sentry_exception_handler is not None:sentry_exception_handler(request=request)return response

效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/420645.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mfc140u.dll文件错误的相关修复方法,4种方法修复mfc140u.dll

当面对基于Microsoft Visual C开发的应用程序出现启动或运行失败时,mfc140u.dll文件错误往往是罪魁祸首之一。这个动态链接库(DLL)文件对于许多Windows软件来说是必不可少的,因为它包含了重要的编程代码和数据。如果发现此文件损坏…

Mac M1安装Hive

一、下载解压Hive 1.官网地址 https://dlcdn.apache.org/hive/ 2.选择对应版本进行下载,这里我以3.1.3为例; 3.下载好后,进行解压,并重命名为hive-3.1.3,放到资源库目录下; 二、配置系统环境 1.打开~/…

c语言和c++的区别

在计算机编程领域,C语言和C无疑是两座重要的里程碑。尽管它们在很多方面有着相似之处,但在设计理念、功能特性以及应用场景上,两者又存在着显著的差异。小编将从多个角度深入探讨C语言和C的区别,帮助读者更好地理解这两种编程语言…

构建安全畅通的道路网络:EasyCVR视频汇聚平台在道路监控中的创新应用

随着城市化进程的加速和交通流量的不断增加,道路监控已成为确保交通安全、维护社会秩序的重要手段。道路上的监控摄像头多种多样,大致可以分为这几类:交通道路监控、治安监控、路口违章监控,以及车辆测速监控等。基于智慧交通的需…

C语言--12字符串处理函数

函数strstr 函数strchr与strrchr 注意: 这两个函数的功能,都是在指定的字符串 s 中,试图找到字符 c。strchr() 从左往右找第一个,strrchr() 从左往右找最后一个。字符串结束标记 ‘\0’ 被认为是字符串的一部分。 函数strlen 示例…

MATLAB求解0-1线性规划问题的详细分析

引言 0-1线性规划是整数规划中的一种特殊形式,它广泛应用于资源分配、工厂选址、投资组合优化、物流运输等多个领域。0-1线性规划的特点是,决策变量只能取0或1的离散值,通常用于描述“是-否”决策问题。随着计算机技术的发展,数学…

HTML 揭秘:HTML 编码快速入门

HTML 揭秘:HTML 编码快速入门 一 . 前端知识介绍二 . HTML 介绍三 . HTML 快速入门四 . HTML 编辑器 - VSCode4.1 插件安装4.2 修改主题配色4.3 修改快捷键4.4 设置自动保存4.5 创建 HTML 文件4.5 书写 HTML 代码4.6 常见快捷键 五 . 基础标签5.1 字体标签5.1.1 col…

2024年最佳本地营销策略的14个专家意见

本地营销对任何企业都很重要——无论您是市中心的夫妻店,还是大型全国连锁店。您都希望被寻找您产品或服务的人看到并找到,而他们通常是在本地搜索这些内容。事实上,几乎一半的Google搜索都有本地意图。 那么,今年哪些是最好的本…

重磅资源来袭。快看看有没有你要的那一款!

Java 相关的技能主要包括以下几个方面‌: 资源在末尾 ‌Java编程语言基础‌:这是Java开发的基础,包括熟悉Java的语法、数据类型、控制结构、异常处理、面向对象编程(OOP)等基本概念。‌Java EE和Spring框架‌&#x…

VBA 获取字段标题代码轻松搞定

hi,大家好! 最近又有一段时间没和大家唠嗑了,最近也没有时间给大家开直播,天天忙,但不知道在忙啥!那今天我们来讲点啥好玩的呢? 今天是老师节,那就先祝各位老师节日快乐&#xff0…

ROS第三梯:ROS+C++实现速腾Bag包的解析

解决问题:速腾Bag包利用bag_to_pcd生成的pcd文件字段名称存在问题,多了几个异常的"_",导致强度属性无法在Intensity中显示。 解决方案:利用sensor_msgs库进行数据读取和转换成sensor_msgs::PointCloud格式,再…

拆分 IP 地址后再分类

Excel里有一列标准的IP v4地址: A110.12.20.30210.205.20.30310.178.20.30410.23.20.30510.167.20.30610.90.20.30710.134.20.30810.177.20.30910.200.20.301010.115.20.301110.48.20.301210.181.20.301310.224.20.301410.57.20.301510.180.20.301610.113.20.30171…

新手入门Python:魔法函数详解与应用

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是魔法函数?📝 基础魔法函数📝 运算符重载📝 高级魔法函数📝 综合应用示例⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程的世界里,有一类特别的函数,它们看似普通,却拥有神奇的力量。这些函…

《Python爬虫逆向实战》加密方法远程调用(RPC)

加密方法远程调用采用了RPC (Remote Procedure Call)协议,即远程过程调用协议。我们让浏览器充当客户端,并通过WebSocket将加密参数值发送给服务端(用Python写一个),这样的话我们就不需要花费大量时间去逆向了。下面我们就通过一个微博登录示…

鸿蒙开发前景

在科技飞速发展的时代,鸿蒙操作系统的出现犹如一颗璀璨的新星,为全球科技领域带来了新的希望与机遇。那么,鸿蒙开发的前景究竟如何呢? 一、鸿蒙系统的独特优势 1. 分布式架构 鸿蒙操作系统采用分布式架构,能够实现不同设备之间的…

MC1496DR2G高性能平衡调制器/解调器的卓越之选

MC1496DR2G适用于输出电压为输入电压(信号)和开关功能(载波)的共同结果的场合。典型应用包括抑制载波和放大调制、同步检测、调频 (FM) 检测、相位检测和斩波器应用。 MC1496DR2G功能特性: 平衡式工作:具…

深度解析 | 二元Logistic回归模型(单因素筛查、软件操作及结果解读)

一、Logistic回归的类型 Logistic回归(又称逻辑回归)是一种广义的线性回归分析模型,用于研究分类型因变量与自变量之间影响关系。Logistic回归分析根据因变量的不同可分为二元Logistic回归、多分类Logistic回归,有序Logistic回归…

2024.9.9(极客大挑战 2019]EasySQL,[极客大挑战 2019]Knife)

题目一:极客大挑战 2019]EasySQL 1、点开题目链接,来到下面的界面 2、遇到这样的登录界面,先尝试admin和万能密码(1 or 11#),拿到flag 题目二:[极客大挑战 2019]Knife 1、点开链接&#xff0c…

iText2KG:显著降低LLM构建知识图谱时的幻觉现象

1. 当前知识图谱构建存在的问题 知识图谱通过捕捉实体之间的关系来构建知识的结构化表示,在分析文本数据集和从结构化异构数据中推断知识方面具有显著优势。比如,知识图谱能够融合来自多个来源的不同数据,提供一个具有凝聚力的信息视角。还能…

12.2 案例分析专题-数据库设计

数据库设计 ER图 真题1 真题2 1