J'aimerais retourner 410 erreurs pour certaines de mes pages de Django au lieu de retourner 404s. Fondamentalement, au lieu d'appeler i suis confus parce que dans django.http, la fonction http404 est simplement: p> Donc, si je fais la même chose et crée ma fonction http410, je suppose que cela ressemblerait à ce que cela ressemblerait à: P> lever http404 ("un message d'erreur") code>, j'aimerais plutôt appeler
lever http410 ("" Quelque message d'erreur ") code> raccourci.
class Http410(Exception):
pass
3 Réponses :
from django.http import HttpResponse return HttpResponse(status=410)
Renvoyer un httpresponsegone code>, une sous-classe de
httpresponse code>
, dans votre gestionnaire de vue. P>
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
@Spike une raison pour laquelle vous ne pouvez pas simplement retourner un objet httpresponsegone code> 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.