mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	Improved unicode-type, ASCII-convertible header handling in
HttpResponse. Fixed #8765. Thanks to SmileyChris and semenov for working on this one. git-svn-id: http://code.djangoproject.com/svn/django/trunk@13740 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
		
							parent
							
								
									3444b065ba
								
							
						
					
					
						commit
						b2d2cb4a31
					
				
					 2 changed files with 16 additions and 7 deletions
				
			
		| 
						 | 
				
			
			@ -303,13 +303,16 @@ class HttpResponse(object):
 | 
			
		|||
 | 
			
		||||
    def __init__(self, content='', mimetype=None, status=None,
 | 
			
		||||
            content_type=None):
 | 
			
		||||
        from django.conf import settings
 | 
			
		||||
        # _headers is a mapping of the lower-case name to the original case of
 | 
			
		||||
        # the header (required for working with legacy systems) and the header
 | 
			
		||||
        # value.  Both the name of the header and its value are ASCII strings.
 | 
			
		||||
        self._headers = {}
 | 
			
		||||
        self._charset = settings.DEFAULT_CHARSET
 | 
			
		||||
        if mimetype:
 | 
			
		||||
            content_type = mimetype     # For backwards compatibility
 | 
			
		||||
        if not content_type:
 | 
			
		||||
            content_type = "%s; charset=%s" % (settings.DEFAULT_CONTENT_TYPE,
 | 
			
		||||
                    settings.DEFAULT_CHARSET)
 | 
			
		||||
                    self._charset)
 | 
			
		||||
        if not isinstance(content, basestring) and hasattr(content, '__iter__'):
 | 
			
		||||
            self._container = content
 | 
			
		||||
            self._is_string = False
 | 
			
		||||
| 
						 | 
				
			
			@ -320,10 +323,7 @@ class HttpResponse(object):
 | 
			
		|||
        if status:
 | 
			
		||||
            self.status_code = status
 | 
			
		||||
 | 
			
		||||
        # _headers is a mapping of the lower-case name to the original case of
 | 
			
		||||
        # the header (required for working with legacy systems) and the header
 | 
			
		||||
        # value.
 | 
			
		||||
        self._headers = {'content-type': ('Content-Type', content_type)}
 | 
			
		||||
        self['Content-Type'] = content_type
 | 
			
		||||
 | 
			
		||||
    def __str__(self):
 | 
			
		||||
        """Full HTTP message, including headers."""
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -204,9 +204,18 @@ class HttpResponseTests(unittest.TestCase):
 | 
			
		|||
        r['value'] = u'test value'
 | 
			
		||||
        self.failUnless(isinstance(r['value'], str))
 | 
			
		||||
        
 | 
			
		||||
        # An error is raised When a unicode object with non-ascii is assigned.
 | 
			
		||||
        # An error is raised ~hen a unicode object with non-ascii is assigned.
 | 
			
		||||
        self.assertRaises(UnicodeEncodeError, r.__setitem__, 'value', u't\xebst value')
 | 
			
		||||
        
 | 
			
		||||
        # An error is raised when  a unicode object with non-ASCII format is
 | 
			
		||||
        # passed as initial mimetype or content_type.
 | 
			
		||||
        self.assertRaises(UnicodeEncodeError, HttpResponse,
 | 
			
		||||
                mimetype=u't\xebst value')
 | 
			
		||||
 | 
			
		||||
        # HttpResponse headers must be convertible to ASCII.
 | 
			
		||||
        self.assertRaises(UnicodeEncodeError, HttpResponse,
 | 
			
		||||
                content_type=u't\xebst value')
 | 
			
		||||
 | 
			
		||||
        # The response also converts unicode keys to strings.)      
 | 
			
		||||
        r[u'test'] = 'testing key'
 | 
			
		||||
        l = list(r.items())
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue