在Django中处理全球500错误的最佳实践是什么?
我有一个用Django开发的应用,后台使用的是MySQL和Redis。
我有一个叫做 redis_helper()
的函数,用来进行Redis的查询。
但是有时候Redis会崩溃,需要一些时间才能重新启动,所以我需要返回一个友好的HTTP 500错误信息。
问题是,Django只在 django/http/__init__.py
里定义了 Http404(Exception)
类,并没有 Http500()
,所以我必须在每个使用到 redis_helper()
的视图函数里手动添加 try ... except
。这样做感觉有点麻烦,而且重复工作。
有没有什么方便的方法可以在视图函数里抛出500错误,而不需要使用 return HttpResponseServerError()
?如果我必须自己写 Http500
类,最好的位置应该放在哪个文件里呢?
谢谢!
2 个回答
听起来你在调用 Redis
的时候没有使用 try:
这个块。
是这样吗?
如果是的话,答案就是要使用 try:
块。
所以我必须在每个涉及到 redis_helper() 的视图函数里手动添加 try ... except。
没错。
这样感觉有点麻烦,而且重复工作。
其实不是。每个视图函数都必须返回一个 HttpResponse
对象。你必须实际写出这段代码。
如果写视图函数感觉重复,我很抱歉,但这就是它们必须工作的方式。它们必须返回一个 HttpResponse
对象。
补充一下。请阅读这个:
http://docs.djangoproject.com/en/1.3/topics/http/views/#the-500-server-error-view
好的,现在我明白了Http404
是怎么回事了。那么你需要在某个地方定义这个Http500
异常,并在中间件中捕捉到它。