web-dev-qa-db-fra.com

Comment puis-je retourner le code d'état HTTP 204 à partir d'une vue Django?

Je souhaite renvoyer le code d'état 204 No Content à partir d'une vue Django. C'est en réponse à un POST qui met à jour une base de données et j'ai juste besoin d'indiquer que la mise à jour a réussi (sans redirection) le client).

Il existe des sous-classes de HttpResponse pour gérer la plupart des autres codes mais pas 204.

Quelle est la manière la plus simple de procéder?

64
Flash
return HttpResponse(status=204)
138
Steve Mayne

Soit ce que Steve Mayne a répondu, soit créez le vôtre en sous-classant HttpResponse:

from Django.http import HttpResponse

class HttpResponseNoContent(HttpResponse):
    status_code = 204

def my_view(request):
    return HttpResponseNoContent()
17
rantanplan

Lors de l'utilisation de render , il y a un argument de mot clé status.

return render(request, 'template.html', status=204)

(Notez que dans le cas du statut 204, il ne devrait pas y avoir de corps de réponse, mais cette méthode est utile pour d'autres codes de statut.)

13
Mark

Si vous retournez render() , selon la documentation Django, render() prend status comme paramètre facultatif, et son valeur par défaut est 200.

Par conséquent, si vous souhaitez renvoyer un statut personnalisé, utilisez:

def my_view(request):
    return render(request,
                  'your-template.html',
                   context=your_context,
                   status=204) # your custom status in this case 204
1
lmiguelvargasf