首页 > 代码库 > Django View使用装饰器捕获数据库连接异常
Django View使用装饰器捕获数据库连接异常
“来不及解释了”,直接上代码。
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--
本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1872599
Django View使用装饰器捕获数据库连接异常
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。