Django View使用装饰器捕获数据库连接异常
admin
2023-06-02 07:41:52
0

“来不及解释了”,直接上代码。

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--

相关内容

热门资讯

伊朗外交部发言人:当前伊美谈判... △伊朗首都德黑兰(资料图)当地时间22日,伊朗外交部发言人巴加埃表示,巴基斯坦陆军参谋长穆尼尔访问伊...
美国国家情报总监加巴德辞职 据福克斯新闻报道,图尔西·加巴德将辞去国家情报总监一职,以支持她的丈夫对抗“一种极其罕见的骨癌”。加...
王文涛部长会见美国副贸易代表斯... 5月21日,商务部部长王文涛在苏州会见来华出席亚太经合组织贸易部长会的美国副贸易代表斯威策一行。双方...
原创 i... 当手中的iPhone XS Max续航开始“力不从心”,多数用户会面临两难选择:换新机还是换电池?作...
神舟二十三号发射在即,各系统准... 今天(5月22日),神舟二十三号载人飞船发射任务组织全区合练。目前,发射任务各系统已完成相关功能检查...
对话“耿同学”:举报纯粹是因为... 5月6日,同济大学一纸调查通报震动学界,该校王平教授团队发表于《Nature》的论文被确认存在学术不...
小米发布跑车级SUV,雷军称未... 来源:中国证券报 5月21日晚,小米集团召开人车家全生态新品发布会。小米集团创始人、董事长兼CEO雷...
贵州威宁:智慧大棚赋能 西葫芦... 初夏时节,走进贵州省毕节市威宁自治县草海镇贵州鲜之源农业开发有限公司智慧大棚种植基地,一派丰收景象映...
原创 马... 近日,特朗普政府原本筹备出台的人工智能监管行政令正式宣告搁置。这一政策变动源于美国科技行业核心力量的...
胡锡进:美称暂停对台军售,岛内... 美高级官员公开称,美国正暂停一项对台140亿美元军售案,理由是伊朗战争对弹药的消耗使得美方无力对台供...