Django+DRF 實戰:自定義異常處理流程

文章目錄

    • 一、DRF 異常處理流程
      • DRF 默認異常處理流程
      • 源碼
    • 二、實戰
      • DRF 自定義異常處理流程
      • 應用自定義異常處理流程


一、DRF 異常處理流程

DRF 默認異常處理流程

DRF默認的異常處理流程如下:

  1. 當異常發生時,會自動調用rest_framework.views.exception_handler 函數來處理異常。
  2. 該函數對DRF異常(即繼承了APIException 類)和Django內置的Http404、PermissionDenied異常,提取錯誤信息并返回響應
  3. 其它異常不處理,返回None(拋出到外層)。

源碼

下面是DRF的exception_handler 異常處理函數源碼

# rest_framework.views.py
def exception_handler(exc, context):if isinstance(exc, Http404):exc = exceptions.NotFound(*(exc.args))elif isinstance(exc, PermissionDenied):exc = exceptions.PermissionDenied(*(exc.args))if isinstance(exc, exceptions.APIException):headers = {}if getattr(exc, 'auth_header', None):headers['WWW-Authenticate'] = exc.auth_headerif getattr(exc, 'wait', None):headers['Retry-After'] = '%d' % exc.waitif isinstance(exc.detail, (list, dict)):data = exc.detailelse:data = {'detail': exc.detail}set_rollback()return Response(data, status=exc.status_code, headers=headers)return None

二、實戰

DRF 自定義異常處理流程

DRF 自定義異常處理流程示例:

  1. 定義custom_exception_handler函數,作為DRF的全局異常處理器
  2. 該函數記錄詳細的錯誤日志,包括用戶、IP、請求路徑、方法、視圖及異常信息。然后,統一返回錯誤響應格式
    • 若異常未被 DRF 捕獲,返回 500 錯誤或特定 ProtectedError 提示
    • 若為 DRF 的 ValidationError 或 Django 的驗證錯誤,調用對應處理函數提取錯誤信息
    • 其他異常則根據狀態碼返回預定義的友好提示

在這里插入圖片描述

應用自定義異常處理流程

settings.py 中,配置DRF自定義異常處理函數,作為全局異常處理器。

REST_FRAMEWORK = {# ...# 全局異常處理"EXCEPTION_HANDLER": "mars_framework.exceptions.base.custom_exception_handler",# ...
}

點擊查看完成代碼


您正在閱讀的是《Django從入門到實戰》專欄!關注不迷路~

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

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

相關文章

Spring MVC 1

什么是Spring Web MVC 官方對Spring MVC的描述是這樣的:Spring Web MVC 是基于Severlet API構建的原始Web框架,從一開始就包含在Spring框架中。它的正式名稱“Spring Web MVC”來自其源模塊的名稱(Spring-webmvc),但它…

一個基于若依(ruoyi-vue3)的小項目部署記錄

一、背景 收到朋友的求助,他拿到了一個項目的源代碼,說需要我幫助部署。部署要求是需要域名訪問。 因為沒有文檔和其他資料以及幫助,我先清理了源收到的資料: 1.后端:是java代碼,一看就是若依框架。心里大大…

【實戰總結】WMIC在HW行動中的4類關鍵應用

WMIC命令完全指南:網絡安全運維工程師的深度實踐手冊 關鍵詞:WMIC命令、Windows管理、網絡安全運維、系統信息收集、進程分析、自動化審計 【實戰總結】WMIC在HW行動中的4類關鍵應用 1. 前言 在Windows環境下的網絡安全運維中,WMIC&#x…

LKT4304穩定可靠高兼容性國產安全加密芯片

隨著 IOT 的飛速發展,智能家居,智能汽車,智能工控等物聯網設備和云服務的安全問題成為IOT普及的關鍵障礙。在設計之初就為物聯網產品配備正確的安全解決方案,是幫助預防措施的關鍵所在。LKT4304是凌科芯安專為物聯網應用場景而推出…

Android 網絡開發核心知識點

Android 網絡開發核心知識點 一、基礎網絡通信 1. HTTP/HTTPS 協議 HTTP方法:GET、POST、PUT、DELETE等狀態碼:200(成功)、404(未找到)、500(服務器錯誤)等HTTPS加密:SSL/TLS握手過程報文結構:請求頭/響應頭、請求體/響應體 2. 網…

DVWA靶場通關筆記-弱會話IDs(Weak Session IDs Medium級別)

目錄 一、Session ID 二、代碼審計(Medium級別) 1、配置security為Medium級別 2、源碼分析 (1)index.php (2)Medium.php (3)對比分析 (4)滲透思路 三…

編輯器Vim的快速入門

如大家所了解的,Vim是一個很古老的編輯器,但是并沒有隨著時間的流逝消失在編輯器/IDE 的競爭中,Vim 獨創的模式機制和 hjkl 移動光標方式使得使用者在編輯文件時可以雙手不離開鍵盤,極大地提升了工作效率。由于 Vim 學習曲線極為陡…

深度學習核心:從基礎到前沿的全面解析

🧠 深度學習核心:從基礎到前沿的全面解析 🚀 探索深度學習的核心技術棧,從神經網絡基礎到最新的Transformer架構 📋 目錄 🔬 神經網絡基礎:從感知機到多層網絡🖼? 卷積神經網絡&am…

MySQL索引:數據庫的超級目錄

MySQL索引:數據庫的「超級目錄」 想象你有一本1000頁的百科全書,要快速找到某個知識點(如“光合作用”): ? 無索引:逐頁翻找 → 全表掃描(慢!)? 有索引:直接…

景觀橋 涵洞 城門等遮擋物對汽車安全性的影響數學建模和計算方法,需要收集那些數據

對高速公路景觀橋影響行車視距的安全問題進行數學建模,需要將物理幾何、動力學、概率統計和交通流理論結合起來。以下是分步驟的建模思路和關鍵模型:一、 核心建模目標 量化視距(Sight Distance, SD):計算實際可用視距…

Git 用戶名和郵箱配置指南:全局與項目級設置

查看全局配置 git config --global user.name # 查看全局name配置 git config --global user.email # 查看全局email配置 git config --global --list # 查看所有全局配置查看當前項目配置 git config user.name # 查看當前項目name配置 git config user.email # 查看當前項目…

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀

視頻序列和射頻信號多模態融合算法Fusion-Vital解讀概述模型整體流程視頻幀時間差分歸一化TSM模塊視頻序列特征融合模塊跨模態特征融合模塊概述 最近看了Fusion-Vital的視頻-射頻(RGB-RF)融合Transformer模型。記錄一下,對于實際項目中的多模…

frp內網穿透下創建FTP(解決FTP“服務器回應不可路由的地址。使用服務器地址替代”錯誤)

使用寶塔面板,點擊FTP,下載Pure-FTPd插件 點擊Pure-FTPd插件,修改配置文件,找到PassivePortRange, 修改ftp被動端口范圍為39000 39003,我們只需要4個被動端口即可,多了不好在內網穿透frp的配置文件中增加…

STM32控制四自由度機械臂(SG90舵機)(硬件篇)(簡單易復刻)

1.前期硬件準備 2s鋰電池一個(用于供電),stm32f103c8t6最小系統板一個(主控板),兩個搖桿(用于搖桿模式),四個電位器(用于示教器模式)&#xff0c…

華為OD機試_2025 B卷_最差產品獎(Python,100分)(附詳細解題思路)

題目描述 A公司準備對他下面的N個產品評選最差獎, 評選的方式是首先對每個產品進行評分,然后根據評分區間計算相鄰幾個產品中最差的產品。 評選的標準是依次找到從當前產品開始前M個產品中最差的產品,請給出最差產品的評分序列。 輸入描述 第…

飛算JavaAI:重塑Java開發效率的智能引擎

飛算JavaAI:重塑Java開發效率的智能引擎 一、飛算JavaAI核心價值 飛算JavaAI是全球首款專注Java語言的智能開發助手,由飛算數智科技(深圳)有限公司研發。它通過AI大模型技術實現: 全流程自動化:從需求分析→軟件設計→代碼生成一氣呵成工程級代碼輸出:生成包含配置類、…

Java和Go各方面對比:現代編程語言的深度分析

Java和Go各方面對比:現代編程語言的深度分析 引言 在當今的軟件開發領域,選擇合適的編程語言對項目的成功至關重要。Java作為一門成熟的面向對象語言,已經在企業級開發中占據主導地位超過25年。而Go(Golang)作為Google…

CloudCanal:一款企業級實時數據同步、遷移工具

CloudCanal 是一款可視化的數據同步、遷移工具,可以幫助企業構建高質量數據管道,具備實時高效、精確互聯、穩定可拓展、一站式、混合部署、復雜數據轉換等優點。 應用場景 CloudCanal 可以幫助企業實現以下數據應用場景: 數據同步&#xff…

如何發現 Redis 中的 BigKey?

如何發現 Redis 中的 BigKey? Redis 因其出色的性能,常被用作緩存、消息隊列和會話存儲。然而,在 Redis 的使用過程中,BigKey 是一個不容忽視的問題。BigKey 指的是存儲了大量數據或包含大量成員的鍵。它們不僅會占用大量內存&…

Golang讀取ZIP壓縮包并顯示Gin靜態html網站

Golang讀取ZIP壓縮包并顯示Gin靜態html網站Golang讀取ZIP壓縮包并顯示Gin靜態html網站1. 讀取ZIP壓縮包2. 解壓并保存靜態文件3. 設置Gin靜態文件服務基本靜態文件服務使用StaticFS更精細控制單個靜態文件服務4. 完整實現示例5. 高級優化內存映射優化使用Gin-Static中間件6. 部…