tornado--输入和输出
- tornado的self.write只接受byte,Unicode,dict三种格式的对象。
- self.write会存在一个缓冲区,当不强制断开缓冲的时候,它会把当前函数的所有write全部读取,在一次性的返回到html页面
- self.flush方法会提前结束self.write的缓冲,将之前读取的write内容返回到html页面
- 当write内容里存在字典时,它会把前面的内容全部按照json格式解析(html标签会失效),若想各自按照特定的格式解析,需要中间用flush隔开。
- self.finish方法会面不能接self.write,但是可以处理别的代码。
- 在Application里面增加一个参数debug=True后,在代码有修改后保存后,服务器会自动重启(方便调试,不要在实际生产环境中运用!)
-
1 from tornado import web 2 from tornado import ioloop 3 from tornado.httpserver import HTTPServer # 非阻塞服务器 4 from tornado.options import define, options 5 6 define('port', 8080, help='run port', type=int) # 自定义类型 7 8 9 class Index(web.RequestHandler): 10 def get(self): 11 self.render('first.html') 12 13 14 class TempHandle(web.RequestHandler): 15 def get(self): 16 self.redirect('https://www.baidu.com/') 17 18 19 application = web.Application( 20 handlers=[ 21 ('/', Index), 22 ('/temp', TempHandle), 23 ], 24 debug=True, 25 template_path='template', 26 ) 27 28 29 def main(): 30 options.parse_command_line() # 打印请求信息 31 HttpServer = HTTPServer(application) # 导入非阻塞服务器 32 HttpServer.listen(options.port) # 改用服务器进行监听 33 ioloop.IOLoop.current().start() # 循环监听 34 35 36 if __name__ == '__main__': 37 main()
tornado渲染模板:在app下定义模板路径
- 在Appalication里面添加一个参数:template_path='模板文件路径的字符串'
- 在视图函数中使用self.render方法渲染模板。render接受一个template_path的html文件的相对路径的字符串
- 页面重定向,self.redirect,redirect里面接收一个需要跳转的url
获取请求信息:
-
- self.request
- HTTPServerRequest(protocol='http', host='127.0.0.1:8080', method='GET', uri='/', version='HTTP/1.1', remote_ip='127.0.0.1') //请求头信息
- HTTPServerRequest(protocol='http', host='127.0.0.1:8080', method='GET', uri='/', version='HTTP/1.1', remote_ip='127.0.0.1') //请求头信息
- self.request + 属性名 (self.request.host,即可拿到host地址)
- 常用的请求信息:
- method
- remote_ip
- full_url() // 重新构建此请求的完整url
- requetst_time() // 请求此请求执行所花费的时间
- uri 请求的完整uri
- path 路径的部分uro
- query 查询部分的uri
- vsersion 请求中的指定的http版本,例如‘http/1.1’
- self.request
- 输入:
- self.get_argument:获取get请求的对应的key值的value,若无该value,则需指定默认值: value = self.get_argument(key,default_value),当一个key对应多个value时,该方法只会获取最后一个value
- self.get_arguments:获取该key对应的所有value,以列表的形式返回。如无value返回,则默认返回空列表
- 这两个方法适用于get和post
- get_query_argument(s):只获取get请求的url参数
- get_body_argument(s):获取post请求的参数
- url传参:
- restful风格的URL传参数
-
1 from tornado import web 2 from tornado import ioloop 3 from tornado.httpserver import HTTPServer # 非阻塞服务器 4 from tornado.options import define, options 5 6 define('port', 8080, help='run port', type=int) # 自定义类型 7 8 9 class Index(web.RequestHandler): 10 def get(self, name, age): 11 self.write('{}{}'.format(name, age)) 12 13 14 application = web.Application( 15 handlers=[ 16 ('/(?P<name>.+)/(?P<age>[0-9]+)', Index), 17 ], 18 debug=True, 19 template_path='template', 20 ) 21 22 23 def main(): 24 options.parse_command_line() # 打印请求信息 25 HttpServer = HTTPServer(application) # 导入非阻塞服务器 26 HttpServer.listen(options.port) # 改用服务器进行监听 27 ioloop.IOLoop.current().start() # 循环监听 28 29 30 if __name__ == '__main__': 31 main()
在路径里面利用正则表达式对url分组匹配进行命名?P<name>,再在视图函数里将组名传入视图函数的参数,就可以拿到restful风格的url参数了。