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
posted @ 2015-05-13 10:53  Jolin123  阅读(1751)  评论(0编辑  收藏  举报