tornado学习笔记(一)
hello.py
mport tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument('greeting', 'hello') self.write(greeting + ', friendly user!') if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
这是tornado一个简单服务器的例子
define("port", default=8000, help="...", type = int)定义了服务器监听的默认端口
IndexHandler
类用来处理请求,get_argument
可以获取get或者post请求中的关键字参数,然后用write输出到页面
if __name__ == "__main__":
里面的代码是实际上运行服务器的代码,parse_command_line函数解析命令行的输入,然后建立Application类型的应用,里面定义handlers,处理不同的url对应的处理类,用正则表达式进行匹配。通过这个app对象可以建立HTTPServer来监听端口,最后运行IOLoop来准备接受http请求
tornado的url正则默认包含行起始和结尾的,如"/"已经表示"^/$"
命令行执行python hello.py --port=8000
可以制定端口运行服务器
终端使用curl
来调试:$ curl http://localhost:8000/?greeting=Haroo
http status code
- 404 : not found
- 400 : bad request,如使用get_argument但没有给默认值,如果查找不到关键字就会返回400
- 405 : method not allowed
- 500 : internal server error
- 200 : ok
当出现错误时,tornado会给客户端返回错误状态码和错误信息,如果要自己设置错误响应,可以重写RequestHandler类中的write_error
函数
class IndexHandler(tornado.web.RequestHandler): def get(self): ... def write_error(self, status_code, **kwargs): self.write("damn it, user! you caused a %d error." % status_code