在python django框架中,实现数据通信使用的是Request对象和Response对象。这也是目前前台通讯的主要方式。
当请求一个页面时,Django会建立一个包含请求元数据的 HttpRequest 对象。 当Django 加载对应的视图时,HttpRequest 对象将作为视图函数的第一个参数。每个视图会返回一个HttpResponse 对象。
本文章对HttpRequest对象的API 进行介绍,这些API 定义在django.http 模块中。
HttpRequest 对象
属性
下面除非特别说明,所有属性都认为是只读的。会话(session) 属性是个例外,需要注意。HttpRequest.scheme:一个字符串,表示请求的方案(通常是http 或https)。
HttpRequest.body:一个字节字符串,表示原始HTTP 请求的正文。它对于处理非HTML 形式的数据非常有用:二进制图像、XML等。 如果要处理常规的表单数据,应该使用HttpRequest.POST。
HttpRequest.path:一个字符串,表示请求的页面的完整路径,不包含域名。例如:''/music/bands/the_beatles/''。
HttpRequest.path_info:在某些Web 服务器配置下,主机名后的URL 部分被分成脚本前缀部分和路径信息部分。path_info 属性将始终包含路径信息部分,不论使用的Web 服务器是什么。使用它代替path 可以让代码在测试和开发环境中更容易地切换。
例如,如果应用的WSGIScriptAlias 设置为''/minfo'',那么当path 是''/minfo/music/bands/the_beatles/'' 时path_info 将是''/music/bands/the_beatles/''。HttpRequest.method:一个字符串,表示请求使用的HTTP 方法。必须使用大写。例如:
HttpRequest.GET:一个类似于字典的对象,包含HTTP GET 的所有参数。
HttpRequest.POST:一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求。POST 请求可以带有空的POST 字典 —— 如果通过HTTP POST 方法请求一个表单但是没有包含表单数据的话。因此,不应该使用if request.POST 来检查使用的是否是POST 方法;应该使用if request.method == ''POST''。
HttpRequest.COOKIES:一个标准的Python 字典,包含所有的cookie。键和值都为字符串。
HttpRequest.FILES:一个类似于字典的对象,包含所有的上传文件。FILES 中的每个键为 中的name。注意,FILES 只有在请求的方法为POST 且提交的
带有enctype=''multipart/form-data'' 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象。HttpRequest.META: 一个标准的Python 字典,包含所有的HTTP 头部。具体的头部信息取决于客户端和服务器,下面是一些示例:CONTENT_LENGTH —— 请求的正文的长度(是一个字符串)。
CONTENT_TYPE —— 请求的正文的MIME 类型。
HTTP_ACCEPT —— 响应可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 响应可接收的编码。
HTTP_ACCEPT_LANGUAGE —— 响应可接收的语言。
HTTP_HOST —— 客服端发送的HTTP Host 头部。
HTTP_REFERER —— Referring 页面。
HTTP_USER_AGENT —— 客户端的user-agent 字符串。
QUERY_STRING —— 单个字符串形式的查询字符串(未解析过的形式)。
REMOTE_ADDR —— 客户端的IP 地址。
REMOTE_HOST —— 客户端的主机名。
REMOTE_USER —— 服务器认证后的用户。
REQUEST_METHOD —— 一个字符串,例如''GET'' 或''POST''。
SERVER_NAME —— 服务器的主机名。
SERVER_PORT —— 服务器的端口(是一个字符串)。
从上面可以看到,除CONTENT_LENGTH 和CONTENT_TYPE 之外,请求中的任何HTTP 头部转换为META 的键时,都会将所有字母大写并将连接符替换为下划线最后加上HTTP_ 前缀。所以,一个叫做X-Bender 的头部将转换成META 中的HTTP_X_BENDER 键。HttpRequest.session:一个既可读又可写的类似于字典的对象,表示当前的会话。
request请求中基本属性就这么多,下回整理response属性。