zoukankan      html  css  js  c++  java
  • 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')

    >>> q = q.copy() # to make it mutable

    >>> q.update({'a': '2'})

    >>> q.getlist('a')

    ['1', '2']

    >>> q['a'] # returns the last

    ['2']

    items()

    和标准字典的items()方法有一点不同,该方法使用单值逻辑的__getitem__():

    >>> q = QueryDict('a=1&a=2&a=3')

    >>> q.items()

    [('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')

    >>> q.lists()

    [('a', ['1', '2', '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。

  • 相关阅读:
    【前端开发】git常见使用命令行,含git提交不交叉rebase操作方法
    【前端开发】vue项目版本提交日志插件changelog
    【git可视化】git可视化工具
    【node爬虫】简单的node爬虫实例教程
    【前端开发】常见的安全攻击
    计算机网络基础知识(待补充)
    大数据生态圈的一致性
    Android Stdio部分配置
    MySQL单机上多实例安装
    MySQL Replication
  • 原文地址:https://www.cnblogs.com/chenjianhong/p/4144870.html
Copyright © 2011-2022 走看看