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