异步,可以处理高并发
tornado程序编写思路
- 创建一个web实例对象,第一个初始化参数为路由映射列表
- 定义实现路由映射列表的Handler类
- 创建服务器实例,绑定服务器端口
- 启动当前线程的IOLoop
import tornado.web
import tornado.ioloop
import tornado.httpserver
import tornado.options
# 用来定义options选项变量的方法,定义的变量可以在全局使用
# name选项变量名,default选项变量的默认值,type类型,multiple参数多个
tornado.options.define("port",default=8000,type=int)
tornado.options.define("itcast",default=[],type=str,multiple=True)
class IndexHandler(tornado.web.RequestHandler):
def initialize(self, subject):
self.subject = subject
def get(self):
self.write(self.subject)
if __name__ == '__main__':
# 转换命令行参数,并将转换的值对应的设置到全局options对象
# tornado.options.parse_command_line()
# 导入配置文件
# tornado.options.parse_config_file('./config')
# print(tornado.options.options.itcast)
app = tornado.web.Application([
(r'/index',IndexHandler,{"subject":"python"}),
],debug=True)
http_server=tornado.httpserver.HTTPServer(app)
http_server.bind(tornado.options.options.port)
http_server.start()
tornado.ioloop.IOLoop.current().start()
获取参数
- self.get_query_argument(name,default,strip)
- self.get_query_arguments() 返回列表
- self.get_body_argument()
- self.get_body_arguments()
- self.get_argument()
- self.get_arguments()
文件的上传
files=self.request.files
from tornado import options,web,httpserver,ioloop
options.define('port',default=8000,type=int)
class IndexHandler(web.RequestHandler):
def get(self, *args, **kwargs):
self.write('hello Tornado')
class UploadHandler(web.RequestHandler):
def post(self, *args, **kwargs):
files = self.request.files
img_files = files.get('img')
if img_files:
img_file = img_files[0]["body"]
file = open('./itcast.txt','w+')
file.write(img_file.decode('gbk'))
file.close()
self.write('ok')
if __name__ == '__main__':
app = web.Application([
(r'/',IndexHandler),
(r'/upload',UploadHandler)
])
http_server=httpserver.HTTPServer(app)
http_server.bind(options.options.port)
http_server.start()
ioloop.IOLoop.current().start()