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