设为首页 加入收藏

TOP

Tornado基础学习篇<一>(二)
2018-12-06 16:09:36 】 浏览:282
Tags:Tornado 基础 学习 < >

循环模块

tornado的核心io循环模块,封装了Linux的epoll和BSD的kqueue,tornado高性能的基石。 以Linux的epoll为例,其原理如下图:

IOLoop.current() 返回当前线程的IOLoop实例。

IOLoop.start() 启动IOLoop实例的I/O循环,同时服务器监听被打开。

小结:

  1. tornado高性能Web原理是利用Linux epoll IO多路模型和协程异步编程

  2. tornado Web框架核心模块是 web 和 核心事件循环模块是 IOLoop

1.3基础应用

上面的例子是get请求,下面我们再来看一下post请求如何做

Post请求

import tornado
from tornado import ioloop,httpserver
from tornado.web import RequestHandler,url
from tornado.options import define,options


tornado.options.define("port",type=int,default=8002,help="服务器客户端")
class IndexHandler(RequestHandler):
    def post(self):
        # a = self.get_body_arguments("a") 
        a = self.get_body_argument("a")
        print(a)
        self.write("a的值为%s"%a)
#入口文件
if __name__ == '__main__':
    tornado.options.parse_command_line()
    app = tornado.web.Application([(r"/",IndexHandler),],
                                  debug=True)
    http_server  = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

使用RequestHandler对象的get_argument方法来捕获请求查询字符串的的参数。

get_argument可以获取post请求和get请求的全部参数。

get_query_argument获取get请求的所有参数。

get_body_argument获取get请求的所有参数。

这里需要注意的是上面的三个方法如果遇到相同的查询字符串,会以最后查询到的字符串值为结果。

这里返回的是最后一个a的值,大家可能会有一问,如果我想获取所有a的值,改怎么做呢。

很简单,上面代码中有个方法我给注释了,没错,就是get_body_arguments,方法会返回所有的a的结果数组。

 

 

 

Post发送json请求

在tornado中post请求接收的参数只允许使用两种格式

但是如果想发送json请求,我们就需要自定义解析json文件的过程

# coding:utf-8
import tornado
from tornado import ioloop,httpserver
from tornado.web import RequestHandler,url
from tornado.options import define,options
import json,time
tornado.options.define("port",type=int,default=8002,help="服务器客户端")
class IndexHandler(RequestHandler):

    def post(self):
        #json请求 解析
        if self.request.headers.get("Content-Type").startswith("application/json"): #判断请求格式
            json_data = self.request.body            #获取请求json
            json_data = str(json_data,'utf-8')       #转换字符串
            json_args = json.loads(json_data)          #转换字典
            self.write(json_args)

#入口文件
if __name__ == '__main__':
    tornado.options.parse_command_line()
    app = tornado.web.Application([(r"/",IndexHandler),
                                   ],
                                  debug=True)
    http_server  = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

request.headers.get方法用来获取报头信息,request.body获取body。

结果:

 

 Post请求上传文件

import tornado
from tornado import ioloop, httpserver
from tornado.web import RequestHandler, url
from tornado.options import define, options
import json, time

tornado.options.define("port", type=int, default=8002, help="服务器客户端")


class IndexHandler(RequestHandler):

    def post(self):
        # 上传文件
        image1 = self.request.files["image1"][0]["body"]
        with open("image1.jpg",'wb')as f:  #文件保存
            f.write(image1)
            f.close()
        self.write("上传成功")



# 入口文件
if __name__ == '__main__':
    tornado.options.parse_command_line()
    app = tornado.web.Application([(r"/", IndexHandler)

                                   ],
                                  debug=True)
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.list  
		
编程开发网
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇爬虫之股票定向爬取 下一篇Titanic生存分析