web的get请求中一个key有多个值的情况django是怎么处理的
QueryDict对象
在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例。 QueryDict类似字典的自定义类,用来处理单键对应多值的情况。因为一些HTML form元素,例如,<selectmultiple="multiple">, 就会传多个值给单个键。
QueryDict对象是immutable(不可更改的),除非创建它们的copy()。这意味着我们不能直接改变request.POST and request.GET的属性。
QueryDict实现所有标准的字典方法。还包括一些特有的方法,见Table H-3.
| Table H-3. How QueryDicts Differ from Standard Dictionaries. | |
| Method | Differences from Standard dict Implementation | 
| __getitem__ | 和标准字典的处理有一点不同,就是,如果Key对应多个Value,__getitem__()返回最后一个value。 | 
| __setitem__ | 设置参数指定key的value列表(一个Python list)。注意:它只能在一个mutable QueryDict 对象上被调用(就是通过copy()产生的一个QueryDict对象的拷贝). | 
| get() | 如果key对应多个value,get()返回最后一个value。 | 
| update() | 参数可以是QueryDict,也可以是标准字典。和标准字典的update方法不同,该方法添加字典 items,而不是替换它们: >>> q = QueryDict('a=1') ['1', '2'] | 
| items() | 和标准字典的items()方法有一点不同,该方法使用单值逻辑的__getitem__(): >>> q = QueryDict('a=1&a=2&a=3') | 
| values() | 和标准字典的values()方法有一点不同,该方法使用单值逻辑的__getitem__(): | 
此外, QueryDict也有一些方法,见Table H-4.
| H-4. 额外的 (非字典的) QueryDict 方法 | |
| Method | Description | 
| copy() | 返回对象的拷贝,内部实现是用Python标准库的copy.deepcopy()。该拷贝是mutable(可更改的) — 就是说,可以更改该拷贝的值。 | 
| getlist(key) | 返回和参数key对应的所有值,作为一个Python list返回。如果key不存在,则返回空list。 It’s guaranteed to return a list of some sort.. | 
| setlist(key,list_) | 设置key的值为list_ (unlike __setitem__()). | 
| appendlist(key,item) | 添加item到和key关联的内部list. | 
| setlistdefault(key,list) | 和setdefault有一点不同,它接受list而不是单个value作为参数。 | 
| lists() | 和items()有一点不同, 它会返回key的所有值,作为一个list, 例如: >>> q = QueryDict('a=1&a=2&a=3') | 
| urlencode() | 返回一个以查询字符串格式进行格式化后的字符串(e.g., "a=2&b=3&b=5"). | 
A Complete Example
例如, 下面是一个HTML form:
<form action="/foo/bar/" method="post">
<input type="text" name="your_name" />
<select multiple="multiple" name="bands"> 
   <option value="beatles">The Beatles</option>
    <option value="who">The Who</option>
    <option value="zombies">The Zombies</option>
</select>
<input type="submit" />
</form>
如果用户在your_name域中输入"JohnSmith",同时在多选框中选择了“The Beatles”和“The Zombies”,下面是Django请求对象的内容:
>>> request.GET{}
>>> request.POST
{'your_name': ['John Smith'], 'bands': ['beatles', 'zombies']}
>>> request.POST['your_name']
'John Smith' 
>>> request.POST['bands']
'zombies'
>>> request.POST.getlist('bands')
['beatles', 'zombies']
>>> request.POST.get('your_name', 'Adrian')
'John Smith'
>>> request.POST.get('nonexistent_field', 'Nowhere Man')
'Nowhere Man'
HttpResponse
对于HttpRequest 对象来说,是由Django自动创建, 但是,HttpResponse对象就必须我们自己创建。每个View方法必须返回一个HttpResponse对象。
HttpResponse类在django.http.HttpResponse。
 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号