10
votes

Comment élever une erreur 410 dans Django

J'aimerais retourner 410 erreurs pour certaines de mes pages de Django au lieu de retourner 404s. Fondamentalement, au lieu d'appeler lever http404 ("un message d'erreur") code>, j'aimerais plutôt appeler lever http410 ("" Quelque message d'erreur ") code> raccourci.

i suis confus parce que dans django.http, la fonction http404 est simplement: p> xxx pré>

Donc, si je fais la même chose et crée ma fonction http410, je suppose que cela ressemblerait à ce que cela ressemblerait à: P>

class Http410(Exception):
    pass


0 commentaires

3 Réponses :


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

0 commentaires

11
votes

Renvoyer un httpresponsegone , une sous-classe de httpresponse , dans votre gestionnaire de vue.


0 commentaires

16
votes

Django n'inclut pas de mécanisme pour cela, car cela devait être flux de travail normal, pas une condition d'erreur, mais si vous souhaitez ne pas le traiter comme une réponse de retour, et comme une exception, il suffit de mettre en place un middleware .

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


3 commentaires

@Spike une raison pour laquelle vous ne pouvez pas simplement retourner un objet httpresponsegone au lieu de soulever une exception et que le middleware injecte l'objet, à la place?


J'ai décidé de simplement retourner un objet HTTPresponseGone depuis que cela semble être la façon normale de faire des choses. Je garde votre réponse marquée comme répondu, car vous avez répondu à la question exacte que j'ai initiée à l'origine.


@Santa Il serait agréable d'augmenter au lieu de revenir, car parfois, vous devez le faire depuis un appel de fonction profondément imbriqué, loin de votre fonction de vue.