“来不及解释了”,直接上代码。
![](/upload/ad_content/xuanchuantu-12.jpg)
专注于为中小企业提供
成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业
七里河免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了近千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。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--
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网页名称:DjangoView使用装饰器捕获数据库连接异常-创新互联
本文地址:
http://csruizhi.cn/article/dijpee.html