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 语句的格式基本完全相同。我们支持 if、for、while 和 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")

浙公网安备 33010602011771号