Django View使用装饰器捕获数据库连接异常
生活随笔
收集整理的這篇文章主要介紹了
Django View使用装饰器捕获数据库连接异常
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
“來不及解釋了”,直接上代碼。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | from?django.shortcuts?import?render,?redirect from?models?import?Hosts from?django?import?forms #?Create?your?views?here. def?database_error(request,?message): ????if?message?==?''?or?message?is?None: ????????message?=?'Error?detail?is?not?given.' ????context?=?{ ????????'database_error':?message, ????} ????return?render(request,?'exception/error.html',?context) def?database_error_decorator(func): ????from?functools?import?wraps ????from?django.utils.decorators?import?available_attrs ????def?decorator(view_func): ????????@wraps(view_func,?assigned=available_attrs(view_func)) ????????def?_wrapped_view(request,?*args,?**kwargs): ????????????try: ????????????????return?view_func(request,?*args,?**kwargs) ????????????except?Exception?as?e: ????????????????return?database_error(request,?message=e.message) ????????return?_wrapped_view ????return?decorator(func) @database_error_decorator def?list_hosts(request): ????hosts?=?Hosts.objects.order_by('-hosts_hosts') ????context?=?{ ????????'hosts':?hosts ????} ????return?render(request,?'inventory/hosts/list_hosts.html',?context) |
????如果因為數據庫連接異常或者數據庫上的原因導致view無法獲取數據庫中的內容所產生的報錯如果直接打印給用戶,則用戶可能一頭霧水,用戶體驗很不友好。因此如果可能的話可以在應用啟動前一個簡單的自檢,檢查數據庫是否可以正常連接等,但是這種檢查一般不夠細致到檢查數據庫中的某個表某個column是否存在,那么是時候該捕獲一下這些異常了。
????如果每一個view中的每一個與數據庫相關的def都去重復捕獲這些異常,顯然不是一個很好的做法。一個比較好的做法就是使用裝飾器來捕獲這些異常。裝飾器的寫法完全可以參照“from django.contrib.auth.decorators import login_required”中的寫法,本文的例子也是參照這一寫法。其實每一個種編程學習起來都是相似的,無論是Shell還是Python,自帶的方法中給出了很多好的示例供我們學習,不重復制造輪子,站在巨人的肩膀上能看的更遠!
tag:裝飾器捕獲異常,裝飾器,異常
--end--
本文轉自 urey_pp 51CTO博客,原文鏈接:http://blog.51cto.com/dgd2010/1872599,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的Django View使用装饰器捕获数据库连接异常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全能系统监控工具dstat
- 下一篇: 重新学.Net[四]——效率和安全