Cập nhật :
Gareth Rees đã đúng khi điểm 1 & 3 không hợp lệ trong trường hợp này. Mặc dù tôi nghĩ rằng điểm 2 và 4 vẫn còn giá trị, do đó tôi sẽ để lại luận văn ở đây.
(Tôi nhận thấy rằng request.POST
đối tượng của cả Kim tự tháp (Pylon) và Django đều là một dạng nào đó MultiDict
. Vì vậy, có lẽ đó là một thực tế phổ biến hơn là làm cho request.POST
bất biến.)
Tôi không thể nói thay cho các anh chàng Django, mặc dù đối với tôi, điều đó có thể xảy ra vì một số lý do sau:
Performence . các đối tượng không thể thay đổi "nhanh hơn" so với các đối tượng có thể thay đổi ở chỗ chúng cho phép tối ưu hóa đáng kể. Một đối tượng là bất biến có nghĩa là chúng ta có thể phân bổ không gian cho nó tại thời điểm tạo và các yêu cầu về không gian không thay đổi. Nó cũng có những thứ như hiệu quả sao chép và hiệu quả so sánh vì nó.
Chỉnh sửa : đây không phải là trường hợpQueryDict
như Gareth Rees đã chỉ ra.
- Trong trường hợp của
request.POST
, có vẻ như không có hoạt động nào ở phía máy chủ cần phải thay đổi dữ liệu của yêu cầu . Và do đó, các đối tượng bất biến phù hợp hơn, chưa kể chúng có lợi thế về độ bền đáng kể.
Các đối tượng bất biến có thể được sử dụng làm dict
khóa, mà tôi cho rằng có thể rất hữu ích ở đâu đó trong Django ..
Chỉnh sửa : sai lầm của tôi, không thay đổi không trực tiếp ngụ ý có thể băm ; Tuy nhiên, các đối tượng có thể băm cũng thường là bất biến .
- Khi bạn chuyển qua
request.POST
(đặc biệt là các plugin của bên thứ ba trở ra), bạn có thể mong đợi rằng đối tượng yêu cầu này từ người dùng sẽ không thay đổi.
Theo một cách nào đó, những lý do này cũng là câu trả lời chung cho "không thể thay đổi và có thể thay đổi?" câu hỏi. Tôi chắc chắn rằng có nhiều cân nhắc về thiết kế hơn ở trên trong trường hợp Django.
request.POST
đã được gửi với nhiều dữ liệu hơn thực tế.