在Django中处理全球500错误的最佳实践是什么?

0 投票
2 回答
2213 浏览
提问于 2025-04-16 15:48

我有一个用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 个回答

0

听起来你在调用 Redis 的时候没有使用 try: 这个块。

是这样吗?

如果是的话,答案就是要使用 try: 块。

所以我必须在每个涉及到 redis_helper() 的视图函数里手动添加 try ... except。

没错。

这样感觉有点麻烦,而且重复工作。

其实不是。每个视图函数都必须返回一个 HttpResponse 对象。你必须实际写出这段代码。

如果写视图函数感觉重复,我很抱歉,但这就是它们必须工作的方式。它们必须返回一个 HttpResponse 对象。


补充一下。请阅读这个:

http://docs.djangoproject.com/en/1.3/topics/http/views/#the-500-server-error-view

0

好的,现在我明白了Http404是怎么回事了。那么你需要在某个地方定义这个Http500异常,并在中间件中捕捉到它。

撰写回答