Changeset 6927
- Timestamp:
- 12/17/07 02:05:51 (7 months ago)
- Files:
-
- django/trunk/django/http/__init__.py (modified) (1 diff)
- django/trunk/tests/regressiontests/httpwrappers/tests.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/http/__init__.py
r6895 r6927 278 278 + '\n\n' + self.content 279 279 280 def _convert_to_ascii(self, *values): 281 "Convert all values to ascii strings" 282 for value in values: 283 if isinstance(value, unicode): 284 try: 285 yield value.encode('us-ascii') 286 except UnicodeError, e: 287 e.reason += ', HTTP response headers must be in US-ASCII format' 288 raise 289 else: 290 yield str(value) 291 280 292 def __setitem__(self, header, value): 293 header, value = self._convert_to_ascii(header, value) 281 294 self._headers[header.lower()] = (header, value) 282 295 django/trunk/tests/regressiontests/httpwrappers/tests.py
r6396 r6927 392 392 [u'bar', u'\ufffd'] 393 393 394 395 ###################################### 396 # HttpResponse with Unicode headers # 397 ###################################### 398 399 >>> r = HttpResponse() 400 401 If we insert a unicode value it will be converted to an ascii 402 string. This makes sure we comply with the HTTP specifications. 403 404 >>> r['value'] = u'test value' 405 >>> isinstance(r['value'], str) 406 True 407 408 An error is raised When a unicode object with non-ascii is assigned. 409 410 >>> r['value'] = u't\xebst value' # doctest:+ELLIPSIS 411 Traceback (most recent call last): 412 ... 413 UnicodeEncodeError: ..., HTTP response headers must be in US-ASCII format 414 415 The response also converts unicode keys to strings. 416 417 >>> r[u'test'] = 'testing key' 418 >>> list(sorted(r.items()))[1] 419 ('test', 'testing key') 420 421 It will also raise errors for keys with non-ascii data. 422 423 >>> r[u't\xebst'] = 'testing key' # doctest:+ELLIPSIS 424 Traceback (most recent call last): 425 ... 426 UnicodeEncodeError: ..., HTTP response headers must be in US-ASCII format 427 394 428 """ 395 429 396 from django.http import QueryDict 430 from django.http import QueryDict, HttpResponse 397 431 398 432 if __name__ == "__main__":
