Index: django/core/handlers/modpython.py
===================================================================
--- django/core/handlers/modpython.py	(revision 6465)
+++ django/core/handlers/modpython.py	(working copy)
@@ -28,6 +28,10 @@
         except:
             post = '<could not parse>'
         try:
+            put = pformat(self.PUT)
+        except:
+            put = '<could not parse>'
+        try:
             cookies = pformat(self.COOKIES)
         except:
             cookies = '<could not parse>'
@@ -35,8 +39,8 @@
             meta = pformat(self.META)
         except:
             meta = '<could not parse>'
-        return '<ModPythonRequest\npath:%s,\nGET:%s,\nPOST:%s,\nCOOKIES:%s,\nMETA:%s>' % \
-            (self.path, get, post, cookies, meta)
+        return '<ModPythonRequest\npath:%s,\nGET:%s,\nPOST:%s,\nPUT:%s,\nCOOKIES:%s,\nMETA:%s>' % \
+            (self.path, get, post, put, cookies, meta)
 
     def get_full_path(self):
         return '%s%s' % (self.path, self._req.args and ('?' + self._req.args) or '')
@@ -51,9 +55,9 @@
     def _load_post_and_files(self):
         "Populates self._post and self._files"
         if 'content-type' in self._req.headers_in and self._req.headers_in['content-type'].startswith('multipart'):
-            self._post, self._files = http.parse_file_upload(self._req.headers_in, self.raw_post_data)
+            self._put, self._post, self._files = http.parse_file_upload(self._req.headers_in, self.raw_post_data)
         else:
-            self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
+            self._put, self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
 
     def _get_request(self):
         if not hasattr(self, '_request'):
@@ -76,6 +80,15 @@
     def _set_post(self, post):
         self._post = post
 
+    def _get_put(self):
+        if not hasattr(self, '_put'):
+            self._load_post_and_files()
+            self._put = self._post
+        return self._put
+
+    def _set_put(self, put):
+        self._put = put
+
     def _get_cookies(self):
         if not hasattr(self, '_cookies'):
             self._cookies = http.parse_cookie(self._req.headers_in.get('cookie', ''))
@@ -128,6 +141,7 @@
 
     GET = property(_get_get, _set_get)
     POST = property(_get_post, _set_post)
+    PUT = property(_get_put, _set_put)
     COOKIES = property(_get_cookies, _set_cookies)
     FILES = property(_get_files)
     META = property(_get_meta)
