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")