9
Traceback (most recent call last):
11
MultiValueDictKeyError: "Key 'foo' not found in <QueryDict: {}>"
13
>>> q['something'] = 'bar'
14
Traceback (most recent call last):
16
AttributeError: This QueryDict instance is immutable
18
>>> q.get('foo', 'default')
24
>>> q.setlist('foo', ['bar', 'baz'])
25
Traceback (most recent call last):
27
AttributeError: This QueryDict instance is immutable
29
>>> q.appendlist('foo', ['bar'])
30
Traceback (most recent call last):
32
AttributeError: This QueryDict instance is immutable
55
>>> q.update({'foo': 'bar'})
56
Traceback (most recent call last):
58
AttributeError: This QueryDict instance is immutable
61
Traceback (most recent call last):
63
AttributeError: This QueryDict instance is immutable
66
Traceback (most recent call last):
68
AttributeError: This QueryDict instance is immutable
71
Traceback (most recent call last):
73
AttributeError: This QueryDict instance is immutable
75
>>> q.setdefault('foo', 'bar')
76
Traceback (most recent call last):
78
AttributeError: This QueryDict instance is immutable
83
###################################
84
# Mutable copy of empty QueryDict #
85
###################################
90
Traceback (most recent call last):
92
MultiValueDictKeyError: "Key 'foo' not found in <QueryDict: {}>"
94
>>> q['name'] = 'john'
103
>>> q['name'] = 'john'
105
>>> q.get('foo', 'default')
108
>>> q.get('name', 'default')
111
>>> q.getlist('name')
117
>>> q.setlist('foo', ['bar', 'baz'])
119
>>> q.get('foo', 'default')
125
>>> q.appendlist('foo', 'another')
128
[u'bar', u'baz', u'another']
140
[(u'foo', u'another'), (u'name', u'john')]
143
[(u'foo', [u'bar', u'baz', u'another']), (u'name', [u'john'])]
149
[u'another', u'john']
154
>>> q.update({'foo': 'hello'})
156
# Displays last value
160
>>> q.get('foo', 'not available')
164
[u'bar', u'baz', u'another', u'hello']
167
[u'bar', u'baz', u'another', u'hello']
169
>>> q.pop('foo', 'not there')
172
>>> q.get('foo', 'not there')
175
>>> q.setdefault('foo', 'bar')
192
#####################################
193
# QueryDict with one key/value pair #
194
#####################################
196
>>> q = QueryDict('foo=bar')
202
Traceback (most recent call last):
204
MultiValueDictKeyError: "Key 'bar' not found in <QueryDict: {u'foo': [u'bar']}>"
206
>>> q['something'] = 'bar'
207
Traceback (most recent call last):
209
AttributeError: This QueryDict instance is immutable
211
>>> q.get('foo', 'default')
214
>>> q.get('bar', 'default')
223
>>> q.setlist('foo', ['bar', 'baz'])
224
Traceback (most recent call last):
226
AttributeError: This QueryDict instance is immutable
228
>>> q.appendlist('foo', ['bar'])
229
Traceback (most recent call last):
231
AttributeError: This QueryDict instance is immutable
260
>>> q.update({'foo': 'bar'})
261
Traceback (most recent call last):
263
AttributeError: This QueryDict instance is immutable
266
Traceback (most recent call last):
268
AttributeError: This QueryDict instance is immutable
271
Traceback (most recent call last):
273
AttributeError: This QueryDict instance is immutable
276
Traceback (most recent call last):
278
AttributeError: This QueryDict instance is immutable
280
>>> q.setdefault('foo', 'bar')
281
Traceback (most recent call last):
283
AttributeError: This QueryDict instance is immutable
288
#####################################################
289
# QueryDict with two key/value pairs with same keys #
290
#####################################################
292
>>> q = QueryDict('vote=yes&vote=no')
297
>>> q['something'] = 'bar'
298
Traceback (most recent call last):
300
AttributeError: This QueryDict instance is immutable
302
>>> q.get('vote', 'default')
305
>>> q.get('foo', 'default')
308
>>> q.getlist('vote')
314
>>> q.setlist('foo', ['bar', 'baz'])
315
Traceback (most recent call last):
317
AttributeError: This QueryDict instance is immutable
319
>>> q.appendlist('foo', ['bar'])
320
Traceback (most recent call last):
322
AttributeError: This QueryDict instance is immutable
324
>>> q.has_key('vote')
340
[(u'vote', [u'yes', u'no'])]
351
>>> q.update({'foo': 'bar'})
352
Traceback (most recent call last):
354
AttributeError: This QueryDict instance is immutable
357
Traceback (most recent call last):
359
AttributeError: This QueryDict instance is immutable
362
Traceback (most recent call last):
364
AttributeError: This QueryDict instance is immutable
367
Traceback (most recent call last):
369
AttributeError: This QueryDict instance is immutable
371
>>> q.setdefault('foo', 'bar')
372
Traceback (most recent call last):
374
AttributeError: This QueryDict instance is immutable
380
Traceback (most recent call last):
382
AttributeError: This QueryDict instance is immutable
384
# QueryDicts must be able to handle invalid input encoding (in this case, bad
386
>>> q = QueryDict('foo=bar&foo=\xff')
395
########################
396
# Pickling a QueryDict #
397
########################
399
>>> q = QueryDict('a=b&c=d')
400
>>> q1 = pickle.loads(pickle.dumps(q, 2))
404
######################################
405
# HttpResponse with Unicode headers #
406
######################################
408
>>> r = HttpResponse()
410
If we insert a unicode value it will be converted to an ascii
411
string. This makes sure we comply with the HTTP specifications.
413
>>> r['value'] = u'test value'
414
>>> isinstance(r['value'], str)
417
An error is raised When a unicode object with non-ascii is assigned.
419
>>> r['value'] = u't\xebst value' # doctest:+ELLIPSIS
420
Traceback (most recent call last):
422
UnicodeEncodeError: ..., HTTP response headers must be in US-ASCII format
424
The response also converts unicode keys to strings.
426
>>> r[u'test'] = 'testing key'
427
>>> l = list(r.items())
430
('test', 'testing key')
432
It will also raise errors for keys with non-ascii data.
434
>>> r[u't\xebst'] = 'testing key' # doctest:+ELLIPSIS
435
Traceback (most recent call last):
437
UnicodeEncodeError: ..., HTTP response headers must be in US-ASCII format
440
# Regression test for #8278: QueryDict.update(QueryDict)
442
>>> x = QueryDict("a=1&a=2", mutable=True)
443
>>> y = QueryDict("a=3&a=4")
446
[u'1', u'2', u'3', u'4']
449
from django.http import QueryDict, HttpResponse
451
if __name__ == "__main__":