“來不及解釋了”,直接上代碼。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、涿鹿ssl等。為上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的涿鹿網(wǎng)站制作公司
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)
如果因為數(shù)據(jù)庫連接異?;蛘邤?shù)據(jù)庫上的原因?qū)е聉iew無法獲取數(shù)據(jù)庫中的內(nèi)容所產(chǎn)生的報錯如果直接打印給用戶,則用戶可能一頭霧水,用戶體驗很不友好。因此如果可能的話可以在應(yīng)用啟動前一個簡單的自檢,檢查數(shù)據(jù)庫是否可以正常連接等,但是這種檢查一般不夠細(xì)致到檢查數(shù)據(jù)庫中的某個表某個column是否存在,那么是時候該捕獲一下這些異常了。
如果每一個view中的每一個與數(shù)據(jù)庫相關(guān)的def都去重復(fù)捕獲這些異常,顯然不是一個很好的做法。一個比較好的做法就是使用裝飾器來捕獲這些異常。裝飾器的寫法完全可以參照“from django.contrib.auth.decorators import login_required”中的寫法,本文的例子也是參照這一寫法。其實每一個種編程學(xué)習(xí)起來都是相似的,無論是Shell還是Python,自帶的方法中給出了很多好的示例供我們學(xué)習(xí),不重復(fù)制造輪子,站在巨人的肩膀上能看的更遠(yuǎn)!
tag:裝飾器捕獲異常,裝飾器,異常
--end--