python中response的全部属性_Django中request和response
中。。。
Django 使⽤ request 和 response 对象表⽰系统状态数据..
当请求⼀个页⾯时,Django创建⼀个 HttpRequest 对象.该对象包含 request 的元数据. 然后 Django 调⽤相应的 view 函数(HttpRequest 对象⾃动传递给该view函数), 每⼀个 view 负责返回⼀个 HttpResponse 对象.
本⽂档解释了 HttpRequest 和 HttpResponse 对象的 API.
HttpRequest 对象
属性
除了 session 以外的其它属性都应该被看作是只读的.
path
⼀个字符串表⽰请求页的路径全名(不包括域名).
Example: "/music/bands/the_beatles/"
GET
可以认为是⼀个字典对象,包括所有的 HTTP GET 参数,参见下⾯的 QueryDict ⽂档.
POST
可以认为是⼀个字典对象,包括所有的 HTTP POST 参数,参见下⾯的 QueryDict ⽂档.
注意: POST 不 包括⽂件上载信息, 参阅 FILES.
REQUEST
为了使⽤⽅便,该对象也可以认为是⼀个字典对象,它包括所有 POST 和 GET 数据(先POST,后GET). (灵感来⾃PHP中的 $_REQUEST 全局变量).
举例: 如果 GET={"name":"john"}, POST={"AGE":"34"} 则 REQUEST["name"]="john", REQUEST["age"]="34".
强烈建议你使⽤ GET 或 POST ⽽不是 REQUEST,因为前者更清晰.
COOKIES
是⼀个标准的Python字典,包括所有的cookie. 键和值都是字符串.
FILES
可以看作是⼀个字典对象,它包含所有的上载⽂件. FILES中的每个键是 中name 的值,每个值是⼀个标准的Python字典,该字典有以下三个键:
filename -- 上传⽂件的⽂件名,⼀个python 字符串
content-type 上传⽂件的 content type
content 上传⽂件的原始内容
注意 FILES 只有在请求⽅式为 POST 并且表单包括 enctype="multipart/form-data" 属性时才会有数据,否则 FILES 就是⼀个空的类似字典的对象.
META
META是⼀个标准的Python字典,包含所有可能的 HTTP 头.
可⽤的 header 依赖客户机和服务器,下⾯是某些可能的值:
CONTENT_LENGTH
CONTENT_TYPE
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE
HTTP_REFERER 引⽤页,如果有的话
HTTP_USER_AGENT 客户机⽤户代理字符串
QUERY_STRING 查询字符串,单⼀的未解析的字符串
REMOTE_ADDR 客户机IP地址
REMOTE_HOST 客户机hostname
REQUEST_METHOD 请求⽅式,⽐如 GET 或 POST
SERVER_NAME 服务器 hostname
SERVER_PORT 服务器端⼝
user
⼀个 ib.auth.users.User 对象, 表⽰当前登录⽤户.如果当前没有⽤户登录, user 被设置成
if request.user.is_anonymous():
# Do something for anonymous users.
else:
# Do something for logged-in users.
session
raw_post_data
原始 HTTP POST 数据. 该属性仅⽤于POST数据的⾼级处理. 更多时候你只需要 POST 对象.
⽅法
__getitem__(key)
根据给定的键,返回⼀个 GET/POST 值. 该⽅法⾸先检查 POST,然后是 GET. 若给定的键未到,引发 KeyError 异常
这使得你能够使⽤访问字典的语法来存取 HttpRequest 实例. 举例来说: ⽆论 request.POST 有⼀个 "foo" 键还是 request.GET 有⼀个"foo" 键,``request["foo"]`` 都会返回相应的值.
has_key()
返回 True 或 False .
get_full_path()
返回⼀个路径,包括query字符串.
Example: "/music/bands/the_beatles/?print=true"
QueryDict 对象
在⼀个 HttpRequest 对象中, GET和POST属性都是 django.http.QueryDict 的实例. QueryDict 是⼀个类似字典的类,被设计成可以处理同⼀个键有多个值的情况.这是很必要的,因为有些 HTML 表单元素,特别是````,使⽤⼀个键来传递多个值
QueryDict 实例是不可变对象,除⾮你创建他们的⼀个拷贝.这意味着你不能直接改变 request.POST 和 request.GET 的值.
QueryDict 实现了所有的标准字典⽅法,因为它就是 dictionary 的⼀个⼦类.下⽂中对与标准字典不⼀致的地⽅做了标注:
__getitem__(key) -- 返加给定键的值. 如果该键有多个值, __getitem__ 返回最后⼀个值.
__setitem__(key, value) -- 将 key 的值设置为 [value] (⼀个Python 列表,只有⼀个元素 value).注意,这个⽅法象其它字典⽅法⼀个拥有副作⽤,只能被⼀个可变的 QueryDict 对象调⽤.(⼀个通过`` copy()``创建的副本).
django项目实例__contains__(key) -- 如果给定键存在,返回 True. 它允许你这么⼲: if "foo" in request.GET.
get(key, default) --类似 __getitem__() ,如果该键不存在,返回⼀个默认值.
has_key(key)
setdefault(key, default) -- 类似标准字典的 setdefault(),不同之处在于它内部使⽤的是 __setitem__().
update(other_dict) -- 类似标准字典的 update(), 唯⼀的不同是它将 other_dict 的元素追加到(⽽不是替换到)当前字典中. ⽰例:
>>> 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__() 的逻辑,它使⽤最后⼀个值.⽰例:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.values()
['3']
除了这些之外,``QueryDict`` 还拥有下列⽅法:
copy() -- 返回当前对象的⼀个拷贝,它使⽤标准库中的 深拷贝 ⽅法. 这个拷贝是可变的,也就是说你可以改变这个拷贝的值.
getlist(key) -- 以⼀个Python列表的形式返回指定键的值.若该键不存在,返回⼀个空的列表.该列表是以某种⽅式排序的.
setlist(key, list_) -- 不同于 __setitem__() ,将给定的键的值设置为⼀个列表.
appendlist(key, item) -- 将给定键对应的值(别忘了,它是⼀个列表)追加⼀个 item.
setlistdefault(key, default_list) -- 就象 setdefault ,不过它接受⼀个列表作为值⽽不是⼀个单⼀的值.
lists() -- 就象 items(),不过它包含所有的值(以列表的⽅式):
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
urlencode() -- 以⼀个查询字符串的形式返回⼀个字符串. Example: "a=2&b=3&b=5".
⽰例
下⾯是⼀个例⼦演⽰了 Django 如何对待输⼊:
The Beatles
The Who
The Zombies
若⽤户输⼊了 "John Smith" 在 your_name 框并且选择在多选框中同时选中了 The Beatles 和 The Zombies, 然后点击 Submit, Django的request对象将拥有:
>>> request.GET
{}
>>> request.POST
{'your_name': ['John Smith'], 'bands': ['beatles', 'zombies']}
>>> request.POST['your_name']
'John Smith'
>>> request.POST['bands']
'zombies'
>>> list('bands')
['beatles', 'zombies']
>>> ('your_name', 'Adrian')
'John Smith'
>>> ('nonexistent_field', 'Nowhere Man')
'Nowhere Man'
实现备注
GET, POST, COOKIES, FILES, META, REQUEST,``raw_post_data`` 及 user 属性都是惰性的.也就是说在你要求得到他们的值之
前,django并不花费时间计算他们的值.只有你需要时,才实时计算出你要的值给你.简单来说,就象 xrange 函数.
HttpResponse 对象
对应着 HttpRequest 对象, HttpResponse 对象也是 Django⾃动⽣成的. 该对象包含你的响应. 你写的每⼀个view都是可响应的并且返回⼀个 HttpResponse 对象.
HttpResponse 类定义在 django.http 中.
⽤法
传递字符串
典型的⽤法就是将页⾯的内容作为字符串传递给 HpptResponse 构造函数:
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", mimetype="text/plain")
如果你需要随时增加内容,你可以象使⽤⼀个⽂件⼀样来使⽤ response 对象:
>>> response = HttpResponse()
>>> response.write("
Here's the text of the Web page.
")
>>> response.write("
Here's another paragraph.
")
你可以使⽤字典语法添加或删除headers:
>>> response = HttpResponse()
>>> response['X-DJANGO'] = "It's the best."
>>> del response['X-PHP']
>>> response['X-DJANGO']
"It's the best."
注意:即使该header 不存在, del 也不会引发 KeyError 异常.
传递迭代器
最后⼀点,允许将⼀个迭代器传递给 HttpResponse 对象. 如果打算使⽤这⼀技术, 只需要遵守以下规则:
迭代器必须返回字符串
如果⼀个 HttpResponse 实例使⽤⼀个迭代器进⾏了初始化, 该实例就不允许再以类似⽂件操作的⽅式来访问.否则就会引发异常.
⽅法
__init__(content='', mimetype=DEFAULT_MIME_TYPE)
根据你提供的页⾯内容(⼀个字符串)和MIME类型,初始化⼀个 HttpResponse 对象.默认的MIME类型是 'text/html'. content 可以是⼀个迭代对象或者是⼀个字符串. 如果它是⼀个迭代对象, 它应该返回字符串, 并且这些字符串连接起来能够形成 response 的内容.
__setitem__(header, value)
header 和 value 都是字符串,将给定的header设置为给定的 value.
__delitem__(header)
删除给定名字的header 如果header不存在,则静默.header是⼤⼩写敏感的..
__getitem__(header)
返回给定header的值,⼤⼩写敏感.
has_header(header)
检查给定header是否存在(⼤⼩写敏感),返回 True ``或``False.
set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None)
设置⼀个cookie 参数与Python标准库中的 cookie Morsel 对象⼀样
max_age是⼀个秒数, None表⽰只要浏览器不关就⼀直存在.
expires 是⼀个这种格式的字符串: "Wdy, DD-Mon-YY HH:MM:SS GMT".

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。