Mise à jour :
Gareth Rees avait raison de dire que les points 1 et 3 n'étaient pas valables dans ce cas. Cependant, je pense que les points 2 et 4 sont toujours valables, et je vais donc laisser ces thèses ici.
(J'ai remarqué que le request.POST
de Pyramid(Pylon) et de Django est une forme de MultiDict
. Donc peut-être que c'est une pratique plus courante que de faire request.POST
immuable).
Je ne peux pas parler pour les gars de Django, mais il me semble que cela pourrait être dû à certaines de ces raisons :
-
Performances . les objets immuables sont plus "rapides" que les objets mutables dans la mesure où ils permettent des optimisations substantielles. Un objet est immuable signifie que nous pouvons lui allouer de l'espace à date de création et les besoins en espace ne changent pas. Il a aussi des avantages comme l'efficacité de la copie et de la comparaison. Editar : ce n'est pas le cas pour QueryDict
comme l'a souligné Gareth Rees.
- Dans le cas de
request.POST
il semble qu'aucune activité du côté serveur ne doive modifier l'adresse de l'utilisateur. de la demande données. Les objets immuables sont donc plus adaptés, sans compter qu'ils présentent un avantage substantiel en termes de performances.
-
Les objets immuables peuvent être utilisés comme dict
clés, que je Supposons que pourrait être très utile quelque part dans Django Editar : mon erreur, immuable n'implique pas directement hachable ; hachable Cependant, les objets sont généralement immuable également.
- Quand vous passez autour
request.POST
(notamment à des plugins tiers et out), vous pouvez vous attendre à ce que cet objet de requête de l'utilisateur reste inchangé.
D'une certaine manière, ces raisons sont également des réponses génériques à la question "immuable ou mutable". Je suis certain qu'il y a beaucoup plus de considérations de conception que celles mentionnées ci-dessus dans le cas de Django.
1 votes
Pourquoi voulez-vous qu'il soit mutable ? Vous pouvez prendre les données qui s'y trouvent et les utiliser/modifier dans votre vue. En y ajoutant des données, vous pouvez donner l'impression que
request.POST
a été soumis avec plus de données qu'il ne l'a été en réalité.11 votes
Ce n'est pas que je veulent qu'il soit mutable. Pas plus que, disons, je ne voudrais que la crème glacée soit froide. Dans le cas de la crème glacée cependant, si c'est n'est pas froid, il fond et ensuite tu te fais gronder pour avoir fait un gros gâchis. Mais avec l'objet request.POST... Je veux dire, si je dois bousiller mon code, je vais le bousiller. Je ne savais pas qu'il y avait une endémie de développeurs ajoutant des données aux objets POST et causant des problèmes, donc ça semble être une chose étrange à cibler pour "réparer".
0 votes
Bonne question ; je n'y ai jamais vraiment pensé.
1 votes
Cela m'est arrivé sporadiquement parce que mon client soumettait parfois des données JSON (mutables) et parfois des messages codés par formulaire URL (immuables).
2 votes
Pour les non-anglophones, "mutify" n'est pas un mot - la phrase correcte est "you can mutate it" ou "you can modify it". Il n'est pas non plus nécessaire de sexuer les développeurs - vous pouvez utiliser "Django team" ou "core devs" plutôt que "guys".