web-dev-qa-db-fra.com

Quelle est la différence entre utiliser Django redirect et HttpResponseRedirect?

Quel est-il préférable d'utiliser en général?

Y a-t-il un avantage à écrire:

return redirect(my_url)

plus de:

return HttpResponseRedirect(my_url)

Ou est-ce un alias direct? Y a-t-il une différence? Quel est le plus Pythonic/Django-nic?

55
Williams

Il y a une différence entre les deux:

Dans le cas de HttpResponseRedirect, le premier argument ne peut être qu'un url.

redirect qui finalement renverra un HttpResponseRedirect peut accepter un model, view ou url tel qu'il est argument "à". Il est donc un peu plus flexible dans ce qu'il peut "rediriger" vers.

J'aime aussi la façon dont redirect est plus court. J'utiliserais donc redirect sur HttpResponseRedirect.

Les deux sont très bien à utiliser cependant.

70
Marwan Alsabbagh

De la documentation -

redirect(to[, permanent=False], *args, **kwargs) Renvoie un HttpResponseRedirect à l'URL appropriée pour les arguments passés.

de la définition c'est la même chose. C'est à cela que servent les raccourcis. Les deux sont une seule et même chose.

les raccourcis sont généralement écrits un niveau au-dessus des API réelles. Donc redirect encapsule HttpResponseRedirect et HttpResponsePermanentRedirect avec l'arg permanent=False.

Il n'y a pas d'inconvénient majeur à utiliser HttpResponseRedirect sur redirect. J'espère que cela le clarifie.

7