diff -uprN django.orig/core/handlers/modpython.py django/core/handlers/modpython.py
--- django.orig/core/handlers/modpython.py	2008-01-16 17:37:22.000000000 +0300
+++ django/core/handlers/modpython.py	2008-01-16 17:53:56.000000000 +0300
@@ -47,11 +47,11 @@ class ModPythonRequest(http.HttpRequest)
             return self._req.is_https()
         except AttributeError:
             # mod_python < 3.2.10 doesn't have req.is_https().
-            return self._req.subprocess_env.get('HTTPS', '').lower() in ('on', '1')
+            return self._req.subprocess_env.has_key('HTTPS') and self._req.subprocess_env['HTTPS'].lower() in ('on', '1')
 
     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'):
+        if self._req.headers_in.has_key('content-type') 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)
         else:
             self._post, self._files = http.QueryDict(self.raw_post_data, encoding=self._encoding), datastructures.MultiValueDict()
@@ -79,7 +79,10 @@ class ModPythonRequest(http.HttpRequest)
 
     def _get_cookies(self):
         if not hasattr(self, '_cookies'):
-            self._cookies = http.parse_cookie(self._req.headers_in.get('cookie', ''))
+            # mod_python2 Table object does not have get() method
+            if not self._req.headers_in.has_key('cookie'):
+                self._req.headers_in['cookie'] = ''
+            self._cookies = http.parse_cookie(self._req.headers_in['cookie'])
         return self._cookies
 
     def _set_cookies(self, cookies):
@@ -93,8 +96,22 @@ class ModPythonRequest(http.HttpRequest)
     def _get_meta(self):
         "Lazy loader that returns self.META dictionary"
         if not hasattr(self, '_meta'):
+            # ap_uath_type and user are members of request object in
+            # mod_python3, but members of request.connection in mod_python2
+            if hasattr(self._req, 'ap_auth_type'):
+                auth_type = self._req.ap_auth_type
+            elif hasattr(self._req.connection, 'ap_auth_type'):
+                auth_type = self._req.connection.ap_auth_type
+            else:
+                auth_type = None
+            if hasattr(self._req, 'user'):
+                user = self._req.user
+            elif hasattr(self._req.connection, 'user'):
+                user = self._req.connection.user
+            else:
+                user = None
             self._meta = {
-                'AUTH_TYPE':         self._req.ap_auth_type,
+                'AUTH_TYPE':         auth_type,
                 'CONTENT_LENGTH':    self._req.clength, # This may be wrong
                 'CONTENT_TYPE':      self._req.content_type, # This may be wrong
                 'GATEWAY_INTERFACE': 'CGI/1.1',
@@ -104,7 +121,7 @@ class ModPythonRequest(http.HttpRequest)
                 'REMOTE_ADDR':       self._req.connection.remote_ip,
                 'REMOTE_HOST':       None, # DNS lookups not supported
                 'REMOTE_IDENT':      self._req.connection.remote_logname,
-                'REMOTE_USER':       self._req.user,
+                'REMOTE_USER':       user,
                 'REQUEST_METHOD':    self._req.method,
                 'SCRIPT_NAME':       None, # Not supported
                 'SERVER_NAME':       self._req.server.server_hostname,
@@ -112,9 +129,9 @@ class ModPythonRequest(http.HttpRequest)
                 'SERVER_PROTOCOL':   self._req.protocol,
                 'SERVER_SOFTWARE':   'mod_python'
             }
-            for key, value in self._req.headers_in.items():
-                key = 'HTTP_' + key.upper().replace('-', '_')
-                self._meta[key] = value
+            for key in self._req.headers_in.keys():
+                meta_key = 'HTTP_' + key.upper().replace('-', '_')
+                self._meta[meta_key] = self._req.headers_in[key]
         return self._meta
 
     def _get_raw_post_data(self):
@@ -176,6 +193,10 @@ class ModPythonHandler(BaseHandler):
             req.headers_out.add('Set-Cookie', c.output(header=''))
         req.status = response.status_code
         try:
+            if hasattr(req, 'send_http_header'):
+                # This method exists only in mod_python2 and must be called
+                # before any data transfer
+                req.send_http_header()
             for chunk in response:
                 req.write(chunk)
         finally:
