开发者

How to raise a 410 error in Django

开发者 https://www.devze.com 2023-01-25 08:55 出处:网络
I\'d like to return 410 errors at for some of my Django pages instead of returning 404s. Basically, instead of calling raise Http404(\'some error message\'), I would like to instead call raise Http410

I'd like to return 410 errors at for some of my Django pages instead of returning 404s. Basically, instead of calling raise Http404('some error message'), I would like to instead call raise Http410('some error message') shortcut.

I am confused becaus开发者_开发技巧e in django.http, the function Http404 is simply:

class Http404(Exception):
    pass

So if I do the same thing and create my Http410 function, I would assume it would look like:

class Http410(Exception):
    pass

However, doing this returns the exception but serves up a 500 error page. How do I recreate the magic of the Http404 exception? I should note, I need to raise the exception from my models (not views) so I can't just return an HttpResponseGone.

Thanks in advance!

Update: I am fully aware of HttpResponseGone and mentioned this in my original question. I already know how to return this in my views. My question is: How do you raise an Http 410 exception similarly to how you raise an Http 404 exception? I want to be able to raise this exception anywhere, not just in my views. Thanks!


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


Django does not include a mechanism for this because gone should be normal workflow, not an error condition, but if you want to not treat it as a return response, and as an exception, just implement a middleware.

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


Return a HttpResponseGone, a subclass of HttpResponse, in your view handler.

0

精彩评论

暂无评论...
验证码 换一张
取 消