如何在Django中引发410错误

时间:2010-11-17 19:57:13

标签: python django error-handling httpresponse http-status-code-410

我想为我的一些Django页面返回410错误而不是返回404。基本上,我不想拨打raise Http404('some error message'),而是拨打raise Http410('some error message')快捷方式。

我很困惑,因为在django.http中,函数Http404只是:

class Http404(Exception):
    pass

因此,如果我做同样的事情并创建我的Http410函数,我会认为它看起来像:

class Http410(Exception):
    pass

但是,执行此操作会返回异常,但会提供500错误页面。如何重新创建Http404异常的魔力?我应该注意,我需要从我的模型(而不是视图)中引发异常,所以我不能只返回一个HttpResponseGone。

提前致谢!

更新: 我完全了解HttpResponseGone,并在我原来的问题中提到了这一点。我已经知道如何在我的观点中返回这个。我的问题是:你如何提出一个Http 410异常与你如何引发Http 404异常类似?我希望能够在任何地方提出这个例外,而不仅仅是在我的观点中。谢谢!

3 个答案:

答案 0 :(得分:22)

from django.http import HttpResponse
return HttpResponse(status=410)

答案 1 :(得分:16)

Django没有包含这种机制,因为它应该是正常的工作流,而不是错误条件,但是如果你不想把它当作一个返回响应,并且作为一个例外,只需要实现一个middleware

class MyGoneMiddleware(object):
    def process_exception(self, request, exception):
        if isinstance(exception, Http410):
            return HttpResponseGone("Gone!")
        return None

答案 2 :(得分:11)

在视图处理程序中返回HttpResponseGoneHttpResponse的子类。