"来不及解释了”,直接上代码。
得到django.shortcuts import 渲染,重定向 得到models import 主机 得到django import 形式 #,Create your  views 这里。 将得到database_error def (请求,,消息): ,,,if message ==,”,趁机message is 没有: ,,,,,,,message =,“Error detail  is not 。” ,,,context =, { ,,,,,,,将得到database_error的”:,消息, ,,,} ,,,return 渲染(请求,,‘异常/error.html’,,上下文) def database_error_decorator(函数): ,才能得到functools import 包装 ,才能得到django.utils.decorators import available_attrs ,,,def 装饰(view_func): ,,,,,,,@wraps (view_func,,分配=available_attrs (view_func)) ,,,,,,,def _wrapped_view(请求,,* args,, * * kwargs): ,,,,,,,,,,,试一试: ,,,,,,,,,,,,,,,return view_func(请求,,* args,, * * kwargs) ,,,,,,,,,,,except Exception as e: ,,,,,,,,,,,,,,,将得到database_error return (请求,,消息=e.message) ,,,,,,,return _wrapped_view ,,,return 装饰(函数) @database_error_decorator def list_hosts(请求): ,,,hosts =, Hosts.objects.order_by (“-hosts_hosts”) ,,,context =, { ,,,,,,,“主机”:主机 ,,,} ,,,return 渲染(请求,,“库存/主机/list_hosts.html”,上下文)
,,,,如果因为数据库连接异常或者数据库上的原因导致视图无法获取数据库中的内容所产生的报错如果直接打印给用户,则用户可能一头雾水,用户体验很不友好。因此如果可能的话可以在应用启动前一个简单的自检,检查数据库是否可以正常连接等,但是这种检查一般不够细致到检查数据库中的某个表某个列是否存在,那么是时候该捕获一下这些异常了。
,,,,如果每一个视图中的每一个与数据库相关的def都去重复捕获这些异常,显然不是一个很好的做法。一个比较好的做法就是使用装饰器来捕获这些异常。装饰器的写法完全可以参照”django.contrib.auth.decorators进口login_required”中的写法,本文的例子也是参照这一写法。其实每一个种编程学习起来都是相似的,无论是Shell还是Python,自带的方法中给出了很多好的示例供我们学习,不重复制造轮子,站在巨人的肩膀上能看的更远!
标记:装饰器捕获异常,装饰器,异常
——最终——