Django全局異常處理全攻略

Django 中處理全局異常,有幾種常見的方式,通常目標是:

  • 捕獲項目中未被單獨處理的錯誤
  • 統一返回給前端(如 JSON 響應 / 自定義錯誤頁)
  • 方便記錄日志

1. 使用 Django 自帶的全局異常處理機制

Django 有一些內置的全局錯誤視圖(默認在 django.views.defaults 中):

  • 404 錯誤:handler404
  • 500 錯誤:handler500
  • 403 錯誤:handler403
  • 400 錯誤:handler400

你可以在項目的 urls.py 中進行重寫:

# urls.py
from django.conf.urls import handler404, handler500, handler403, handler400
from django.http import JsonResponsedef custom_404(request, exception):return JsonResponse({"error": "頁面未找到"}, status=404)def custom_500(request):return JsonResponse({"error": "服務器錯誤"}, status=500)def custom_403(request, exception):return JsonResponse({"error": "無權限訪問"}, status=403)def custom_400(request, exception):return JsonResponse({"error": "錯誤請求"}, status=400)handler404 = custom_404
handler500 = custom_500
handler403 = custom_403
handler400 = custom_400

👉 適合處理 HTTP 層面的全局錯誤


2. 使用中間件捕獲全局異常

如果你想在 更底層 捕獲異常,可以寫一個自定義中間件:

# middlewares.py
import logging
from django.http import JsonResponselogger = logging.getLogger(__name__)class GlobalExceptionMiddleware:def __init__(self, get_response):self.get_response = get_responsedef __call__(self, request):try:return self.get_response(request)except Exception as e:logger.error(f"Unhandled Exception: {str(e)}", exc_info=True)return JsonResponse({"error": "服務器內部錯誤"}, status=500)

然后在 settings.py 中注冊:

MIDDLEWARE = [...'your_project.middlewares.GlobalExceptionMiddleware',
]

👉 適合捕獲 所有未被顯式處理的異常,并進行日志記錄 / 統一 JSON 響應。


3. Django REST Framework (DRF) 的全局異常處理

如果你用的是 DRF,可以在 settings.py 中配置全局異常處理函數:

# settings.py
REST_FRAMEWORK = {"EXCEPTION_HANDLER": "your_project.utils.custom_exception_handler"
}

實現 custom_exception_handler

# utils.py
from rest_framework.views import exception_handler
from rest_framework.response import Response
from rest_framework import statusdef custom_exception_handler(exc, context):# 先調用 DRF 默認的異常處理response = exception_handler(exc, context)if response is None:# 沒有被 DRF 識別的異常return Response({"error": "服務器內部錯誤"}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)# 可以統一改造返回結構return Response({"error": response.data,"status_code": response.status_code}, status=response.status_code)

👉 適合 API 項目,能讓前端統一處理錯誤。


4. 日志系統與監控

全局異常捕獲后,還需要考慮 記錄日志報警。常見做法:

  • 在中間件或異常處理函數里調用 logging,寫到文件或 ELK。
  • 接入 Sentry,實時監控線上異常。

? 總結:

  • 普通 Django 項目:用 handler404/500/403/400 + 中間件
  • API 項目(DRF):用 自定義 exception_handler
  • 日志監控:結合 logging 或 Sentry。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/921578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/921578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/921578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【開題答辯全過程】以電商數據可視化系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人,語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

MyBatis入門到精通:CRUD實戰指南

1. MyBatisORM:對象關系映射O(Object):Java虛擬機中的Java對象R(Relational):關系型數據庫M(Mapping):將Java虛擬機中的Java對象映射到數據庫表中一行記錄&am…

WebRTC開啟實時通信新時代

摘要:WebRTC(Web實時通信)是一項開源技術,支持瀏覽器直接進行低延遲音視頻通信和數據傳輸,無需安裝插件。其核心技術包括RTCPeerConnection(建立點對點連接)、MediaStream(媒體流處理…

【51單片機8*8點陣顯示箭頭動畫詳細注釋】2022-12-1

緣由51單片機實現8*8滾動箭頭的程序,運行時什么圖案都沒有,甚至根本不亮 - 24小時必答區 #include<reg52.h> unsigned char code M[]{0xff,0xff,0xfe,0xfd,0xf8,0xfd,0xfe,0xff,0xff,0xff,0xfd,0xfb,0xf0,0xfb,0xfd,0xff,0xff,0xff,0xfb,0xf7,0xe0,0xf7,0xfb,0xff,0xff,0…

手撕Redis底層3-持久化機制與集群化方案

1.Redis持久化機制Redis設計了兩種持久化落盤機制&#xff1a;RDB和AOF1.1 RDB持久化RDB持久化是Redis的數據快照&#xff0c;簡單來說就是把內存中的所有數據都記錄到磁盤中&#xff0c;當Redis實例故障重啟后&#xff0c;從磁盤中讀取快照文件來恢復數據。快照文件稱為RDB文件…

mysql中null值對in子查詢的影響

1、場景 有這樣一個查詢&#xff0c;有些時候是正確的&#xff0c;有些時候沒報錯但是又查詢不到數據&#xff0c;分析數據排查后發現當user_id字段存在null值的時候查詢不到數據。select * from table1 where id in (select user_id from talbe2 where status1);2、問題 為什么…

如何在 tortoise-orm 內使用 JSON_EXTRACT

先說結論&#xff1a; # 假設 JsonField 名稱為 data&#xff0c;內容為 {"info": {"path": "我的資源創建"}} qs qs.filter(data__filter{"info.path": "我的資源創建"})我查看了 tortoise-orm 官方文檔&#xff0c;沒有這…

西門子S7-200 SMART PLC:編寫最基礎的“起保停”程序

一、什么是“起保停”電路&#xff1f;“起保停”是“啟動-保持-停止”的簡稱&#xff0c;也稱為“自鎖電路”。它是繼電器控制系統和PLC程序中最基本、最核心的控制邏輯。啟動 (Start): 由一個點動按鈕&#xff08;常開觸點&#xff09;觸發&#xff0c;使設備運行。保持 (H…

漏洞修復 Nginx SSL/TLS 弱密碼套件

掃描結果 [rootlocalhost nmap]# docker run --rm -v $(pwd)/results:/results securecodebox/nmap nmap --script ssl-enum-ciphers -p 443 xxx.cn -oX /results/output_0904.xml Starting Nmap 7.80 ( https://nmap.org ) at 2025-09-04 05:02 UTC Nmap scan report for xxx.…

ChartGPT深度體驗:AI圖表生成工具如何高效實現數據可視化與圖表美化?

最近幫運營同事做季度數據報告時&#xff0c;我差點在圖表樣式上栽跟頭 —— 明明數據都算好了&#xff0c;用 Excel 調柱狀圖的顏色、字體、坐標軸標簽&#xff0c;來回改了快半小時&#xff0c;要么字體太大擠在一起&#xff0c;要么顏色搭配顯臟&#xff0c;運營催得急&…

深入理解 JVM 字節碼文件:從組成結構到 Arthas 工具實踐

在 Java 技術體系中&#xff0c;JVM&#xff08;Java 虛擬機&#xff09;是實現 “一次編寫&#xff0c;到處運行” 的核心。而字節碼文件作為 Java 代碼編譯后的產物&#xff0c;是 JVM 執行的 “原材料”。今天&#xff0c;我們就從字節碼文件的組成結構講起&#xff0c;再結…

SoundSource for Mac 音頻控制工具

SoundSource for Mac 是一款音頻控制工具&#xff0c;中文常被稱為 音頻源管理器。它能夠精確控制系統與應用程序的音量、輸出設備和音效處理&#xff0c;讓用戶獲得比 macOS 原生更靈活的音頻管理體驗。SoundSource 既適合音樂發燒友&#xff0c;也適合日常辦公和影音娛樂用戶…

云平臺面試內容(二)

5. VPC、子網、路由、NAT網關、安全組、網絡ACL 區別與網絡隔離設計 概念區別: VPC(虛擬私有云): VPC是在公有云上劃分出的一個用戶專屬的虛擬網絡環境,相當于用戶在云上的私有數據中心。用戶可以自定義VPC的IP地址段、路由策略等。不同VPC網絡隔離,默認互不相通,確保資…

2023 arXiv MapperGPT: Large Language Models for Linking and Mapping Entities

論文基本信息 題目&#xff1a;MapperGPT: Large Language Models for Linking and Mapping Entities作者&#xff1a;Nicolas Matentzoglu, J. Harry Caufield, Harshad B. Hegde, Justin T. Reese, Sierra Moxon, Hyeongsik Kim, Nomi L. Harris, Melissa A Haendel, Christo…

Docker入門到精通:從零基礎到生產部署

前言&#xff1a;為什么你需要學習Docker&#xff1f; 想象一下&#xff0c;你開發了一個應用程序&#xff0c;在你的電腦上運行完美&#xff0c;但當你把它交給同事或部署到服務器時&#xff0c;卻出現了各種奇怪的問題。這就是著名的"在我機器上能運行"問題。 Do…

HOT100--Day15--98. 驗證二叉搜索樹,230. 二叉搜索樹中第 K 小的元素,199. 二叉樹的右視圖

HOT100–Day15–98. 驗證二叉搜索樹&#xff0c;230. 二叉搜索樹中第 K 小的元素&#xff0c;199. 二叉樹的右視圖 每日刷題系列。今天的題目是《力扣HOT100》題單。 題目類型&#xff1a;二叉樹。 關鍵&#xff1a;要深刻理解《遞歸》 98. 驗證二叉搜索樹 思路&#xff1a; …

獨角數卡對接藍鯨支付平臺實現個人

目錄 什么是獨角數卡&#xff1f;安裝部署教程一、獨角數卡安裝二、獨角數卡支付配置三、獨角數卡BUG修復 什么是獨角數卡&#xff1f; ? ? ? ? ? ? ? 獨角數卡(Dujiaoka)?是一款基于Laravel框架開發的開源式站長自動化售貨解決方案&#xff0c;主要用于虛擬商品和數字…

人工智能常見分類

人工智能的分類方式多樣&#xff0c;以下是一些常見的分類方法及具體類型&#xff1a; 一、按功能目標分類 弱人工智能&#xff08;ANI&#xff0c;Narrow AI&#xff09;&#xff1a;專注于單一任務&#xff0c;無自主意識&#xff0c;如圖像識別&#xff08;人臉解鎖&#xf…

PO BAPI bapi_po_create1

當執行BAPI時,需要導入增強字段,其中增強字段包含數值型號字段時,需要增強BADI::ME_BAPI_PO_CUST 代碼如下: 記錄一下,下次自己繼續用 bapi處: ls_te_item-po_item = lv_item.ls_te_item-zz001 = 11.ls_te_item-zz005 = 22.ls_te_item-zz008 = 33.ls_te_item-zz009 = 44…

棧欺騙技術的作用是什么?

好的&#xff0c;我們來詳細解釋一下“棧欺騙技術”&#xff08;Stack Spoofing&#xff09;的作用。簡單來說&#xff0c;棧欺騙技術的核心作用是隱藏程序&#xff08;尤其是惡意軟件或安全工具&#xff09;的真實調用鏈&#xff0c;使其逃避基于棧回溯&#xff08;Stack Walk…