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