Tornado web框架学习笔记
Tornado是一种 Web 服务器软件的开源版本,它是非阻塞式服务器,而且速度相当快。
一、基本操作
import tornado.ioloop import tornado.web # 模板引擎 class MainHandler(tornado.web.RequestHandler): def get(self,*args,**kwargs): # self.write('Hello world') self.render('template.html',mag='') self.redirect('template.html') def post(self,*args,**kwargs): value = slef.get_argument('') # 获取post提交的数据 cookie = slef.get_cookie() # 获取cookie信息 self.render('template.html',mag='') self.redirect('template.html',) # 配置文件 settings = { "template_path":'views', "cookie_secret":'nhskha' } # 路由系统 application = tornado.web.Application([ (r"/index",MainHandler), ],**settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
获取信息: slef.get_argument('') # 获取post提交的数据 slef.get_arguments() # 获取post提交的全部数据 cookie 操作: slef.set_cookie() # 设置cookie信息 slef.get_cookie() # 获取cookie信息 slef.set_secret_cookie('cookie') # 加密cookie 必须settings中配置自己加密的字符串 slef.get_secret_cookie('cookie') # 解密cookie 获取文件: slef.request.files[''] self._headers # 获取请求头信息
ps:不同的功能可以分拆到不同的功能文件夹中;实现功能独立。for循环必须return
二、模板引擎
{{ li[0] }} # 获取列表信息 {% for i in range(10) %} {% end %} # 所有需要结束的都以end结尾 自定义模板标签 可通过 UIMothod UIModule 进行自定义方法和模板 {% module 类名() %}
2.1、自定义模板
module.py文件:定义模板类与方法
from tronado.web import UIModule from tornado import escape class Custom(UIModule): def embedded_css(self):# 嵌入式css样式 return "css样式" def css_files(self): return 'css静态文件' def embedded_javascript(self):# 嵌入javascript代码 return "javascript代码" def javascript_files(self): return 'javascript静态文件' def render(self,*args,**kwargs): return "<h1>返回内容</h1>" # 不设置转译是什么东西直接输出 # return escape.xhtml_escape('<h1>返回内容</h1>') 转译html标签为字符串
method.py文件:自定义方法
from tornado import escape def tab(self,val): print(self,val) # slef:<class 'tornado.httputil.HTTPServerRequest'> return 'UIMethod' # 返回html标签会直接输出,在settings中需要配置
自定义方法需要在settings进行注册,才能在html文件中使用
import method as mt import module as mm settings = { 'ui_methods':mt,# 注册自定义方法 'ui_modules':mm,# 注册自定义模板 'static_path':'/static/' # 指定静态文件 }
html使用
<html> <head> <title>使用自定义模板</title> </head> <body> <!-- 自定义方法的使用 --> {{ tab(11) }} <!-- 转译html标签为字符串 --> {% raw tab(11) %} <!-- 不转译html标签为字符串 --> <!-- 模板的使用 --> {% module Custom(22) %} </body> </html>
三、自定义开源组件
3.1、Tornado 自定义继承的一些事情
# 1、多继承 Python是可以多继承。 import tornado.ioloop import tornado.web class Foo(object): def initialize(self):# initialize是tornado.web.RequestHandler 父类中的方法 self A = 123 super(Foo,self).initialize() # 利用super() 可以执行其他自定义的类 # 模板引擎 class MainHandler(Foo,tornado.web.RequestHandler): def get(self,*args,**kwargs): self.write('Hello world') # 路由系统 application = tornado.web.Application([ (r"/index",MainHandler), ],**settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()
# 2、通用的继承方法 ''' Foo 继承 tornado.web.RequestHandler MainHandler 再继承 Foo 来实现类方法的扩展 ''' import tornado.ioloop import tornado.web class Foo(tornado.web.RequestHandler): def initialize(self):# initialize是tornado.web.RequestHandler 父类中的方法 self A = 123 super(Foo,self).initialize() # 利用super() 可以执行其他自定义的类 # 模板引擎 class MainHandler(Foo): def get(self,*args,**kwargs): self.write('Hello world') # 路由系统 application = tornado.web.Application([ (r"/index",MainHandler), ],**settings) if __name__ == "__main__": application.listen(8888) tornado.ioloop.IOLoop.instance().start()