tornado.web.RequestHandler对象详解

RequestHandler是tornado处理http请求的基类。对于一个http请求,使用此类获取请求的内容,并定制其响应内容。下面总结一下该类所包含的方法或变量。

1、 self.request对象包含请求中的所有信息

  使用dir(self.request)打印出来的内容有:[‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__doc__‘, ‘__format__‘, ‘__getattribute__‘, ‘__hash__‘, ‘__init__‘, ‘__module__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduceex\_‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasshook__‘, ‘__weakref__‘, ‘_finish_time’, ‘_parse_body’, ‘_start_time’, ‘arguments’, ‘body’, ‘body_arguments’, ‘connection’, ‘cookies’, ‘files’, ‘finish’, ‘full_url’, ‘get_ssl_certificate’, ‘headers’, ‘host’, ‘host_name’, ‘method’, ‘path’, ‘protocol’, ‘query’, ‘query_arguments’, ‘remote_ip’, ‘request_time’, ‘server_connection’, ‘supports_http_1_1’, ‘uri’, ‘version’, ‘write’]

实际请求如下:

function post() {
        url = "http://10.126.1.209:8008/page?x=123&y=222&x=234"
        var htmlobj=$.ajax({url:url,async:false,data:"abc\nxyx",type:"POST",headers:{"user":"admin"}});
        $("#response").html(htmlobj.responseText);
    }
名称 说明 示例
__class__ 具体的类名 <class ‘tornado.httputil.HTTPServerRequest’>
__dict__ self.request对象所包含的所有非继承属性 {‘body’:’a=b&aa=bb’,
‘files’: {},
‘protocol’: ‘http’,
‘connection’: <tornado.http1connection.HTTP1Connection object at 0x0387D330>,
‘body_arguments’: {‘a’: [‘b’], ‘aa’: [‘bb’]},
‘uri’: ‘/page’,
‘query_arguments’: {},
‘_start_time’: 1533177225.76,
‘headers’: <tornado.httputil.HTTPHeaders object at 0x0387D470>,
‘host’: ‘10.126.1.209:8008’,
‘version’: ‘HTTP/1.1’,
‘server_connection’: <tornado.http1connection.HTTP1ServerConnection object at 0x0387D2B0>,
‘host_name’: ‘10.126.1.209’,
‘_finish_time’: None,
‘query’: ‘’,
‘arguments’: {‘a’: [‘b’], ‘aa’: [‘bb’]},
‘path’: ‘/page’,
‘method’: ‘POST’,
‘remote_ip’: ‘10.126.1.209’}
_start_time 请求开始时间 1533177225.76
arguments 所有请求参数,包含url中的query部分,以及请求Body中的参数。(说明:query参数相同key可以保存多个value,body中的参数同名只会保存最后一个值)。
当请求Body为字符串的时候,将字符串作为arguments的key,value为空值
a) {‘y’: [‘222’], ‘x’: [‘123’, ‘234’], ‘aa’: [‘bb’], ‘a’: [‘c’]}
b) 请求data变为”abc”时,{‘y’: [‘222’], ‘x’: [‘123’, ‘234’], ‘abc’: [‘’]}
body 字符串类型,请求Body内容,urlencode编码后的字符串 a=c&aa=bb或者abc
body_arguments 同arguments,只包含body中的参数 {‘a’: [‘c’], ‘aa’: [‘bb’]}或者{‘abc’: [‘’]}
cookies 获取请求cookies字符串内容 _xsrf=2|b362be79|83193f43f7fb09b14cbd70ef9bfc1748|1532330344; user=”2|1:0|10:1533116808|4:user|8:YWRtaW4=|ac6a2f9f3df2c67e903490af706fe7881208abb30c4108b87779dd8fffdbe349”
files 传输的文件
headers 请求头 Origin: http://localhost:63342
Content-Length: 3
Accept-Language: zh-CN,zh;q=0.9
Accept-Encoding: gzip, deflate
Connection: keep-alive
Accept: /
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Host: 10.126.1.209:8008
Referer: http://localhost:63342/consul/test.html?_ijt=7qq0e9dtrj0j7ikqsgee0qu9gq
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
host 请求的主机 10.126.1.209:8008
host_name 主机名 10.126.1.209
method 请求的方法 POST/GET
path 请求的资源路径,不带query参数 /page
protocol 协议类型 http/https
query 请求地址中query部分的参数 x=123&y=222&x=234
query_arguments 类似于arguments,但是只包含query部分 {‘y’: [‘222’], ‘x’: [‘123’, ‘234’]}
remote_ip 请求主机地址 10.126.1.209
version 协议版本 HTTP/1.1

2、 RequestHandler响应设置的一些方法

2.1 self.set_header(name,value)设置响应头

add_header(name,value)也可设置响应头

2.2 self.get_argument(name,[default])获取请求参数

如果有多个值只获取最后一个值

2.3 self.write(chunk)将内容写进response body中去

2.4 self.finish([chunk])关闭连接

2.6 self.write_error(status_code,kwargs)返回错误响应内容

2.7 self.set_status(status_code,reason)返回指定响应码和响应描述

2.9 self.redirect(url,permanent,status)重定向到指定url

2.11 self.on_finish()响应发送到客户端,关闭连接后调用

2.12 self.render(templateName,kwargs)渲染模板并作为响应内容