django-QueryDict 对象

  在 HttpRequest 对象中,属性 GET 和 POST 得到的都是 django.http.QueryDict 所创建的实例。这是一个 django 自定义的类似字典的类,用来处理同一个键带多个值的情况。

  在 python 原始的字典中,当一个键出现多个值的时候会发生冲突,只保留最后一个值。而在 HTTL 表单中,通常会发生一个键有多个值的情况,例如 <select multiple> (多选框)就是一个很常见情况。

  request.POST 和request.GET 的QueryDict 在一个正常的请求/响应循环中是不可变的。若要获得可变的版本,需要使用.copy()方法。

  下面我们来看这个类中有什么方法:

1.QueryDict.__init__(query_string=None, mutable=False, encoding=None)

  这是一个构造函数,其中 query_string 需要一个字符串,例如:

>>> QueryDict(‘a=1&a=2&c=3‘)
<QueryDict: {‘a‘: [‘1‘, ‘2‘], ‘c‘: [‘3‘]}>

  如果 query_string 没有传入,则获得一个空的对象。

  你所遇到的 QueryDict 对象,特别是 request.POST 和 request.GET 得到的。如果你想自己实例化一个对象,可以传递 mutable=True 使你所实例化的对象可变。当然 request.POST 和 request.GET 是django创建的,也就是说除非改 django 源码,否则它们是不可变的。

  对于设置的键和值,会从 encoding 转码成 Unicode。也就是说,如果传入的字符串 query_string  是 GBK 或者是 utf-8 的编码,将会自动转码成 Unicode,然后用做字典的键和值。如果 encoding = None,也就是没有设定的话,将使用 DEFAULT_CHARSET 的值,默认为:‘utf-8‘。

2.QueryDict.__getitem__(key)

  返回给出的 key 的值。如果key 具有多个值,__getitem__() 返回最后(最新)的值。如果 key 不存在,则引发django.utils.datastructures.MultiValueDictKeyError。(它是Python 标准KeyError 的一个子类,所以你仍然可以坚持捕获KeyError。)

3.QueryDict.__setitem__(key, value)

  设置给出的 key 的值为[value](一个Python 列表,只有一个元素 value)。注意:只有对象是可以改变的时候才能使用,例如通过 .copy() 方法创建的对象。

4.QueryDict.__contains__(key)

  如果给出的key 已经设置,则返回True。它让你可以做 if "foo" in request.GET  这样的操作。

5.QueryDict.get(key, default)

  使用与上面__getitem__() 相同的逻辑,但是当key 不存在时返回一个默认值。

6.QueryDict.setdefault(key, default)

  类似标准字典的setdefault() 方法,只是它在内部使用的是__setitem__()。也就是说,当key已经存在时,返回其值,key不存在时,返回default,同时添加 key 和 default到对象中。

7.QueryDict.update(other_dict)

  接收一个QueryDict 或标准字典。类似标准字典的update() 方法,但是它附加到当前字典项的后面,而不是替换掉它们。

例如:

>>> q = QueryDict(‘a=1‘, mutable=True)    # 当然要可变的才能使用
>>> q.update({‘a‘: ‘2‘})
>>> q.getlist(‘a‘)
[‘1‘, ‘2‘]
>>> q[‘a‘] # returns the last
[‘2‘]

8.QueryDict.items()

  类似标准字典的items() 方法,返回一个由键值组成的元祖的列表。但是它使用的是和__getitem__ 一样返回最新的值的逻辑。

例如:

>>> q = QueryDict(‘a=1&a=2&a=3‘)
>>> q.items()
[(‘a‘, ‘3‘)]

9.QueryDict.iteritems()

  类似标准字典的iteritems() 方法,返回一个迭代对象。类似 QueryDict.items(),它使用的是和QueryDict.__getitem__() 一样的返回最新的值的逻辑。

10.QueryDict.iterlists()

  类似QueryDict.iteritems(),返回一个包含键值对的元祖(key, value)迭代对象 ,value 是一个包括所有 key 的值的列表。

11.QueryDict.values()

  类似标准字典的values() 方法,但是它使用的是和__getitem__ 一样返回最新的值的逻辑。也就是返回一个所有键对应的最新值的列表。

例如:

>>> q = QueryDict(‘a=1&a=2&a=3‘)
>>> q.values()
[‘3‘]

12.QueryDict.itervalues()

  类似QueryDict.values(),只是它返回的是一个迭代器。

13.QueryDict.copy()

  返回对象的副本,使用Python 标准库中的copy.deepcopy()。此副本是可变的即使原始对象是不可变的。

14.QueryDict.getlist(key, default)

  以Python 列表形式返回所请求的键的数据。如果键不存在并且没有提供默认值,则返回空列表。它保证返回的是某种类型的列表,除非默认值不是列表。

15.QueryDict.setlist(key, list_)

  为给定的键设置list_(与__setitem__() 不同),可以设置一个多元素的列表。

16.QueryDict.appendlist(key, item)

  将项追加到内部与键相关联的列表中。

17.QueryDict.setlistdefault(key, default_list)

  类似setdefault,除了它接受一个列表而不是单个值。

18.QueryDict.lists()

  类似items,只是它将字典中的每个成员作为列表。也就是说,列表中的每个元素,都是由键和对应的值列表组成的二元元祖。

例如:

>>> q = QueryDict(‘a=1&a=2&a=3‘)
>>> q.lists()
[(‘a‘, [‘1‘, ‘2‘, ‘3‘])]

19.QueryDict.pop(key)

  返回给定键的值的列表,并从字典中移除它们。如果键不存在,将引发KeyError

例如 ︰

>>> q = QueryDict(‘a=1&a=2&a=3‘, mutable=True)
>>> q.pop(‘a‘)
[‘1‘, ‘2‘, ‘3‘]

20.QueryDict.popitem()

  删除字典任意一个成员(因为没有顺序的概念),并返回二值元组,包含键和键的所有值的列表。在一个空的字典上调用时将引发KeyError

例如 ︰

>>> q = QueryDict(‘a=1&a=2&a=3‘, mutable=True)
>>> q.popitem()
(‘a‘, [‘1‘, ‘2‘, ‘3‘])

21.QueryDict.dict()

  返回QueryDict 的dict 表示形式。对于QueryDict 中的每个(key, list)对 ,dict 将有(key, item) 对,其中item 是列表中的一个元素,使用与QueryDict.__getitem__()相同的逻辑,也就是最新的:

>>> q = QueryDict(‘a=1&a=3&a=5‘)
>>> q.dict()
{‘a‘: ‘5‘}

22.QueryDict.urlencode([safe])

  从数据中返回查询字符串格式。

例如:

>>> q = QueryDict(‘a=2&b=3&b=5‘)
>>> q.urlencode()
‘a=2&b=3&b=5‘

  可选地,urlencode 可以传递不需要编码的字符。(这意味着要进行 url 编码)

例如︰

>>> q = QueryDict(mutable=True)
>>> q[‘next‘] = ‘/a&b/‘
>>> q.urlencode(safe=‘/‘)
‘next=/a%26b/‘
时间: 2024-08-05 11:15:59

django-QueryDict 对象的相关文章

django基础知识之QueryDict对象:

QueryDict对象 定义在django.http.QueryDict request对象的属性GET.POST都是QueryDict类型的对象 与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况 方法get():根据键获取值 只能获取键的一个值 如果一个键同时拥有多个值,获取最后一个值 dict.get('键',default) 或简写为 dict['键'] 方法getlist():根据键获取值 将键的值以列表返回,可以获取一个键的多个值 dict.getl

Django WSGIRequest对象

1. WSGIRequest对象作用 Django在接收到http请求之后,会根据http请求携带的参数以及报文信息创建一个WSGIRequest对象,并且作为视图函数第一个参数传给视图函数.也就是我们经常看到的request参数.在这个对象上我们可以找到客户端上传上来的所有信息.这个对象的完整路径是django.core.handlers.wsgi.WSGIRequest. def index(request): print(type(request)) pass #打印结果:<class '

django.http.request中QueryDict 对象

在一个 HttpRequest 对象中, GET 和 POST 属性都是 django.http.QueryDict 的实例. QueryDict 是一个类似于字典的类,专门用来处理用一个键的多值.当处理一些HTML表单中的元素,特别是 <select multiple="multiple"> 之类传递同一key的多值的元素时,就需要这个类了. QueryDict 实例是不可变的,除非创建了一个 copy() 副本.也就是说不能直接更改 request.POST 和 req

Django HttpRequest对象的一些属性与方法

HttpRequest对象的属性 属性 描述 path 表示提交请求页面完整地址的字符串,不包括域名,如 "/music/bands/the_beatles/". method 表示提交请求使用的HTTP方法.它总是大写的.例如: if request.method == 'GET': do_something() elif request.method == 'POST': do_something_else() GET 一个类字典对象,包含所有的HTTP的GET参数的信息.见 Qu

django HttpRequest对象

每当一个用户请求发送过来,Django将HTTP数据包中的相关内容,打包成为一个HttpRequest对象,并传递给每个视图函数作为第一位置参数,也就是request,供我们调用. HttpRequest对象中包含了非常多的重要的信息和数据,应该熟练掌握它. 类定义:class HttpRequest[source] 一.属性 HttpRequest对象的大部分属性是只读的,除非特别注明. 1. HttpRequest.scheme 字符串类型,表示请求的协议种类,'http'或'https'.

Django F对象的使用

概念 class FF()是代表模型字段的值,也就是说对于一些特殊的字段的操作,我们不需要用Python把数据先取到内存中,然后操作,在存储到db中了. 场景 例1:我们有个统计点击量的字段,每次更新的操作其实就是把字段的值加1. 一般我们的做法是把这条记录取出来,把相应字段加+1,然后在save,类似下面的代码: # Tintin filed a news story! reporter = Reporters.objects.get(name='Tintin') reporter.stori

【转载】使用信号监控 Django 模型对象字段值的变化

转载出处:http://blog.csdn.net/pushiqiang/article/details/74949465 Django 信号 (Signals) 的功能类似于 WordPress 的动作 (action),用于为项目全局增加事件的广播 (dispatch) 与接收 (receive) 机制.其中,灵活使用其内置的模型信号 (Model Signals) 的接收功能就可以监控大部分模型对象 (Model instances) 的变化.因为不需要修改模型本身的代码,在进行跨应用 (

django HttpResponse对象

HttpResponse对象 概述: 作用:给浏览器返回数据 HttpRequest对象是由Django创建的,HttpResponse对象是由程序员创建 用法: 不用模板,直接返回数据 语句示例:return HttpResponse("Sunck is a good man") 调用模板 使用render方法 原型:render(request, templateName[, context]) 作用:结合数据和模板,返回一个完整的HTML页面 参数: request:请求体对象

Python - Django - request 对象

request.method: 获取请求的方法,例如 GET.POST 等 views.py: from django.shortcuts import render, HttpResponse # request 对象 def test(request): print(request.method) return render(request, "test.html") 访问页面 可以通过 request.method 查看请求方式 request.GET: 用来获取 URL 里面的

django关系对象映射(Object Relational Mapping,简称ORM)

Model 创建数据库,设计表结构和字段 django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表 from django.db import models class userinfo(models.Model): name = models.CharField(max_length=30) email = models.EmailField() memo = models.TextField() 连表结构 一对多:models.ForeignKey(其他表)