tornado【第二篇】tornado web基础
官方文档web部分
http://www.tornadoweb.org/en/stable/webframework.html
第一个tornado程序
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") if __name__ == "__main__": application = tornado.web.Application([ (r"/", MainHandler), ]) application.listen(8888) tornado.ioloop.IOLoop.current().start()
热重载和调试模式
debug=True
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") if __name__ == "__main__": application = tornado.web.Application([ (r"/", MainHandler), ], debug=True) application.listen(8888) tornado.ioloop.IOLoop.current().start()
tornado使用规范
规范用法
使用async 和 await
import tornado.ioloop import tornado.web import time class MainHandler(tornado.web.RequestHandler): async def get(self): self.write("Hello, world") if __name__ == "__main__": application = tornado.web.Application([ (r"/", MainHandler), ], debug=True) application.listen(8888) tornado.ioloop.IOLoop.current().start()
反例
不能使用同步的写法,否则没有异步
如:使用time.sleep

import tornado.ioloop import tornado.web import time class MainHandler(tornado.web.RequestHandler): def get(self): time.sleep(5) self.write("Hello, world") class MainHandler2(tornado.web.RequestHandler): def get(self): self.write("Hello, world2") if __name__ == "__main__": application = tornado.web.Application([ (r"/", MainHandler), (r"/2", MainHandler2), ], debug=True) application.listen(8888) tornado.ioloop.IOLoop.current().start()

import tornado.ioloop import tornado.web import time class MainHandler(tornado.web.RequestHandler): async def get(self): time.sleep(5) self.write("Hello, world") class MainHandler2(tornado.web.RequestHandler): async def get(self): self.write("Hello, world2") if __name__ == "__main__": application = tornado.web.Application([ (r"/", MainHandler), (r"/2", MainHandler2), ], debug=True) application.listen(8888) tornado.ioloop.IOLoop.current().start()
路由系统
主要讲解了三个知识点
# 1.url的各种参数配置 # 2. url命名 reverse_url # 3. 给handler传入初始值
import time from tornado import web import tornado class MainHandler(web.RequestHandler): # 当客户端发起不同的http方法的时候, 只需要重载handler中的对应的方法即可 async def get(self, *args, **kwargs): self.write("hello world") class PeopleIdHandler(web.RequestHandler): def initialize(self, name): self.db_name = name async def get(self, id, *args, **kwargs): self.redirect("用户id:{}".format(id)) # self.redirect(self.reverse_url("people_name", "bobby")) class PeopleNameHandler(web.RequestHandler): async def get(self, name, *args, **kwargs): self.write("用户姓名:{}".format(name)) class PeopleInfoHandler(web.RequestHandler): async def get(self, name, age, gender, *args, **kwargs): self.write("用户姓名:{},用户年龄:{},用户性别:{},".format(name, age, gender)) people_db = { "name": "people" } from tornado.web import url # 配置如/people/1/ urls = [ tornado.web.URLSpec("/", MainHandler, name="index"), tornado.web.URLSpec("/people/(\d+)/?", PeopleIdHandler, people_db, name="people_id"), tornado.web.URLSpec("/people/(\w+)/?", PeopleNameHandler, name="people_name"), # 配置如/people/bobby/ # tornado.web.URLSpec("/people/(\w+)/(\d+)/(\w+)/?", PeopleInfoHandler, name="people_info"), #配置如/people/name/age/gender/ tornado.web.URLSpec("/people/(?P<name>\w+)/(?P<age>\d+)/(?P<gender>\w+)/?", PeopleInfoHandler, name="people_info"), # 配置如/people/name/age/gender/ ] if __name__ == "__main__": app = web.Application(urls, debug=True) app.listen(8888) tornado.ioloop.IOLoop.current().start()
Request handlers
http://www.tornadoweb.org/en/stable/web.html#request-handlers
谢谢