Tornado

介绍

轻量级web框架,自己实现的Socket,所以拥有了异步非阻塞,天生支持WebSocket的特点,当然也可以使用其他的WSGI,不过这样就失去了特点

安装

pip3 install tornado

使用

从hello word开始

import tornado.ioloop
import tornado.web
   
   
class MainHandler(tornado.web.RequestHandler):
    def get(self): # FBV的形式
        self.write("Hello, world") # 响应字符串
   
application = tornado.web.Application([
    (r"/index", MainHandler), # 路由注册
])
   
   
if __name__ == "__main__":
    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

路由系统

在上面写到了一个简单的路由注册

application = tornado.web.Application([ 
    (r"/index", MainHandler), # 路由注册
])
# 实例化tornado.web.Application对象
   
application.listen(8888)

动态路由

import tornado.ioloop
import tornado.web

class StoryHandler(tornado.web.RequestHandler):
    def get(self, story_id):
        self.write("You requested the story " + story_id)

application = tornado.web.Application([
    (r"/story/([0-9]+)", StoryHandler),
])

application.listen(80)
tornado.ioloop.IOLoop.instance().start()

二级路由

import tornado.ioloop
import tornado.web


class StoryHandler(tornado.web.RequestHandler):
    def get(self, story_id):
        self.write("You requested the story " + story_id)
   
class BuyHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("buy.wupeiqi.com/index")
   
application = tornado.web.Application([
    (r"/index", MainHandler),
    (r"/story/([0-9]+)", StoryHandler),
])
   
application.add_handlers('buy.wupeiqi.com$', [
    (r'/index',BuyHandler),
])

模板

Tornao中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。

Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}。表达语句是使用 {{ 和 }} 包起来的,例如 {{ items[0] }}

控制语句和对应的 Python 语句的格式基本完全相同。我们支持 ifforwhile 和 try,这些语句逻辑结束的位置需要用 {% end %} 做标记。还通过 extends 和 block 语句实现了模板继承。这些在 template 模块 的代码文档中有着详细的描述。

注:在使用模板前需要在setting中设置模板路径:"template_path" : "tpl"

请求响应

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        pwd = self.get_argument('pwd')
        user = self.get_argument('user')
        print(user, pwd)
        self.render('login.html',msg='')
    def post(self):
        pwd = self.get_argument('pwd')
        user = self.get_argument('user')
        print(user,pwd)
        self.write('OK')

# GET请求和POST的请求数据都在get_argument中,POST优先于GET
# 另外还有get_arguments(列表形式,多选,post和get的数据会放到一起)
# get_query_arguments从url里获得列表
# get_query_argument从url里获得一个
# get_body_arguments从请求体里获得列表
# get_body_argument从请求体里获得一条

# 响应
self.write # 响应字符串
self.render # 渲染模板
self.redirect # 重定向

Cookie

Tornado中并不支持session操作,需要自己实现

# 读写cookie
self.get_cookie("mycookie")
self.set_cookie("mycookie", "myvalue")

# 加密cookie
self.get_secure_cookie("mycookie"):
self.set_secure_cookie("mycookie", "myvalue")

  

  

posted @ 2018-05-19 10:56  瓜田月夜  阅读(107)  评论(0编辑  收藏  举报