Django

Code

Changeset 6546

Show
Ignore:
Timestamp:
10/20/07 00:58:48 (11 months ago)
Author:
mtredinnick
Message:

Changed the way we handle HTTP headers internally so that they appear
case-insensitive, but the original case is preserved for output. This increases the chances of working with non-compliant clients without changing the external interface. Fixed #2970.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/trunk/django/http/__init__.py

    r6537 r6546  
    262262            self._container = [content] 
    263263            self._is_string = True 
    264         self._headers = {'content-type': content_type} 
    265264        self.cookies = SimpleCookie() 
    266265        if status: 
    267266            self.status_code = status 
    268267 
     268        # _headers is a mapping of the lower-case name to the original case of 
     269        # the header (required for working with legacy systems) and the header 
     270        # value. 
     271        self._headers = {'content-type': ('Content-Type', content_type)} 
     272 
    269273    def __str__(self): 
    270274        "Full HTTP message, including headers" 
    271275        return '\n'.join(['%s: %s' % (key, value) 
    272             for key, value in self._headers.items()]) \ 
     276            for key, value in self._headers.values()]) \ 
    273277            + '\n\n' + self.content 
    274278 
    275279    def __setitem__(self, header, value): 
    276         self._headers[header.lower()] = value 
     280        self._headers[header.lower()] = (header, value) 
    277281 
    278282    def __delitem__(self, header): 
     
    283287 
    284288    def __getitem__(self, header): 
    285         return self._headers[header.lower()] 
     289        return self._headers[header.lower()][1] 
    286290 
    287291    def has_header(self, header): 
     
    292296 
    293297    def items(self): 
    294         return self._headers.items() 
     298        return self._headers.values() 
    295299 
    296300    def get(self, header, alternate): 
    297         return self._headers.get(header.lower(), alternate) 
     301        return self._headers.get(header.lower(), (None, alternate))[1] 
    298302 
    299303    def set_cookie(self, key, value='', max_age=None, expires=None, path='/', domain=None, secure=None):