Tastypie:将Django 500“Unknown MySQL server host”变成502 Bad Gateway?

时间:2013-11-26 15:20:02

标签: django tastypie

每当我的应用程序服务器和数据库服务器之间出现连接时出现问题,它就会抛出500“未知的MySQL服务器主机”错误。我有这些问题很好的特点,并希望将500更改为502 Bad Gateway错误。 500的堆栈跟踪当然不会通过我自己的任何代码。捕获和重新定位此服务器连接错误的最简洁的地方是什么?

1 个答案:

答案 0 :(得分:1)

django middleware

你在django应用程序中包装所有视图并捕获数据库异常

class DbExceptCatcherMiddleware(object):

    def process_view(self, request, view_func, view_args, view_kwargs):
        def catcher(view_func, view_args, view_kwargs):
            def f(view_args, view_kwargs):
                try:
                   return view_func(*view_args, **view_kwargs)
                except DatabaseError:
                   raise HttpResponse(content='Unknown MySQL server host', status=502)
            return f
        view_func = catcher(view_func, view_args, view_kwargs)
在settings.py

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',

'path.to.module.DbExceptCatcherMiddleware',
)
这可能会有所帮助,但我不确定。我没有测试这段代码。

或者您可以使用装饰器

def wrapp_excep(func):
    def f(*arg, **kwd):
        try:
           return func(*arg, **kwd)
        except DatabaseError:
           raise HttpResponse(content='Unknown MySQL server host', status=502)
    return f

@wrapp_excep
def your_view_1(request):
    ....

@wrapp_excep
def your_view_2(request):
    ....