如何在Django中引发410错误
我想在我的一些Django页面上返回410错误,而不是404错误。简单来说,我希望能用 raise Http410('一些错误信息')
来替代 raise Http404('一些错误信息')
。
我有点困惑,因为在django.http里,Http404这个函数其实就是:
class Http404(Exception):
pass
所以如果我也这样做,创建一个Http410函数,我想它应该是这样的:
class Http410(Exception):
pass
但是这样做虽然会返回异常,却显示了500错误页面。我该如何重新实现Http404异常的效果呢?我需要注意的是,我需要在我的模型中抛出这个异常(而不是在视图中),所以我不能仅仅返回一个HttpResponseGone。
谢谢!
更新: 我完全知道HttpResponseGone,并在我最初的问题中提到过。我已经知道如何在我的视图中返回这个。我的问题是:我该如何像抛出Http404异常那样抛出Http410异常?我希望能在任何地方抛出这个异常,而不仅仅是在我的视图中。谢谢!
3 个回答
11
在你的视图处理函数中,返回一个 HttpResponseGone
,它是 HttpResponse
的一个子类。
24
from django.http import HttpResponse
return HttpResponse(status=410)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
16
Django并没有提供这种机制,因为“消失”应该是正常的工作流程,而不是错误的情况。不过,如果你想把它当作异常处理,而不是普通的返回响应,你可以实现一个中间件。
class MyGoneMiddleware(object):
def process_exception(self, request, exception):
if isinstance(exception, Http410):
return HttpResponseGone("Gone!")
return None