Обновление :
Гарет Рис был прав в том, что пункты 1 и 3 в данном случае недействительны. Хотя я думаю, что пункты 2 и 4 все еще в силе, поэтому я оставлю здесь тезисы.
(Я заметил, что request.POSTобъект как Pyramid (Pylon), так и Django является некоторой формой MultiDict. Так что, возможно, это более распространенная практика, чем создание request.POSTнеизменяемого.)
Я не могу говорить за ребят из Django, хотя мне кажется, что это могло произойти по некоторым из следующих причин:
Исполнение . неизменяемые объекты «быстрее», чем изменяемые, в том смысле, что они допускают существенную оптимизацию. Неизменяемость объекта означает, что мы можем выделить для него пространство во время создания , и требования к пространству не меняются. Он также имеет такие вещи, как эффективность копирования и эффективность сравнения.
Изменить : это не так,QueryDictкак указал Гарет Рис.
- В случае
request.POST, кажется, что никакие действия на стороне сервера не должны изменять данные запроса . И, следовательно, неизменяемые объекты больше подходят, не говоря уже о том, что они имеют существенное преимущество в производительности.
Неизменяемые объекты могут использоваться как dictключи, что, как я полагаю, может быть очень полезно где-нибудь в Django ..
Редактировать : моя ошибка, неизменяемость не подразумевает напрямую хеширование ; Однако хешируемые объекты обычно также неизменяемы .
- Когда вы переходите
request.POST(особенно к сторонним плагинам и выходят), вы можете ожидать, что этот объект запроса от пользователя останется неизменным.
В каком-то смысле эти причины также являются общими ответами на вопрос «неизменный vs изменчивый?» вопрос. Я уверен, что в случае с Django существует гораздо больше соображений по поводу дизайна, чем указано выше.
request.POSTбыло отправлено больше данных, чем было на самом деле.