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

 

posted @ 2019-05-31 15:21  沐风先生  阅读(241)  评论(0)    收藏  举报