How to raise a 410 error in Django
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.
精彩评论