10

Me gustaría devolver 410 errores en algunas de mis páginas de Django en lugar de devolver 404s. Básicamente, en lugar de llamar al raise Http404('some error message'), me gustaría llamar al acceso directo raise Http410('some error message').Cómo generar un error 410 en Django

Estoy confundido porque en django.http, la función Http404 es simplemente:

class Http404(Exception): 
    pass 

Así que si hago lo mismo y crear mi función Http410, quiero suponer que se vería así:

class Http410(Exception): 
    pass 

Sin embargo, al hacerlo se devuelve la excepción pero se muestra una página con 500 errores. ¿Cómo recreo la magia de la excepción Http404? Debo señalar, tengo que levantar la excepción de mis modelos (no vistas), así que no puedo simplemente devolver un HttpResponseGone.

¡Gracias de antemano!

Actualización: Soy plenamente consciente de HttpResponseGone y mencioné esto en mi pregunta original. Ya sé cómo devolver esto en mi opinión. Mi pregunta es: ¿cómo se plantea una excepción Http 410 similar a cómo se plantea una excepción Http 404? Quiero ser capaz de plantear esta excepción en cualquier lugar, no solo en mi opinión. ¡Gracias!

Respuesta

16

Django no incluye un mecanismo para esto porque no debe haber flujo de trabajo normal, no es un error, pero si no desea tratarlo como una respuesta de retorno, y como una excepción, simplemente implemente un middleware.

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

Perfecto. ¡Gracias! – Spike

+0

Además, gracias por su comentario sobre cómo se debe haber ido el flujo de trabajo normal en lugar de una condición de error. Lo tendré en cuenta. – Spike

+0

@Spike ¿Por qué no puedes simplemente devolver un objeto 'HttpResponseGone' en lugar de lanzar una excepción y hacer que el middleware inyecte el objeto? – Santa

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

devolver un HttpResponseGone, una subclase de HttpResponse, en su manejador de vista.

Cuestiones relacionadas