1,基础功能
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Author : Marvin King
# Date : 2018-11-27
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
# 4.返回页面、模版引擎
# self.write('Hello,world!')
self.render('index.html', **{'k1': 'v1', 'k2': [1, 2, 3, 4], 'k3': {'name': 'root', 'age': 18}})
class LoginHandler(tornado.web.RequestHandler):
def get(self):
if self.get_cookie('islogin'):
self.redirect('/index')
self.render('login.html')
def post(self, *args, **kwargs):
# 5.获取用户请求信息
v = self.get_argument('user')
print v
if v == 'bob':
# 6。额外内容设置
self.set_cookie('islogin', '1')
# 7.重定向
self.redirect('/index')
# 9.倒入并注册
import uimethod as mt
import uimodule as md
# 8.配置
settings = {
'static_path': 'static',
'static_url_prefix': '/stc',
'template_path': 'templates',
'ui_methods':mt,
'ui_modules':md,
}
# 1.生成路由规则
application = tornado.web.Application([
(r'/index', MainHandler),
(r'/login', LoginHandler),
],
**settings)
if __name__ == '__main__':
# 2.创建socket对象
application.listen(8888)
# 3.运行死循环
tornado.ioloop.IOLoop.instance().start()
2.关于模版
Tornado中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。
Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {%
和 %}
包起来的 例如 {% if len(items) > 2 %}
。表达语句是使用 {{
和 }}
包起来的,例如 {{ items[0] }}
。
控制语句和对应的 Python 语句的格式基本完全相同。我们支持 if
、for
、while
和 try
,这些语句逻辑结束的位置需要用 {% end %}
做标记。还通过 extends
和 block
语句实现了模板继承。这些在 template
模块 的代码文档中有着详细的描述。
在模板中默认提供了一些函数、字段、类以供模板使用:
escape
:tornado.escape.xhtml_escape
的別名xhtml_escape
:tornado.escape.xhtml_escape
的別名url_escape
:tornado.escape.url_escape
的別名json_encode
:tornado.escape.json_encode
的別名squeeze
:tornado.escape.squeeze
的別名linkify
:tornado.escape.linkify
的別名datetime
: Python 的datetime
模组handler
: 当前的RequestHandler
对象request
:handler.request
的別名current_user
:handler.current_user
的別名locale
:handler.locale
的別名_
:handler.locale.translate
的別名static_url
: forhandler.static_url
的別名xsrf_form_html
:handler.xsrf_form_html
的別名
Tornado默认提供的这些功能其实本质上就是 UIMethod 和 UIModule,我们也可以自定义从而实现类似于Django的simple_tag的功能:
#uimethod.py
def tab(self):
return 'This is UIMethod'
#uimodule.py
from tornado.web import UIModule
from tornado import escape
class Custom(UIModule):
def embedded_css(self):
return 'body{color:red;}'
def css_files(self):
return 'a1.css'
def render(self, *args, **kwargs):
print(args)
return escape.xhtml_escape('<h1>Hello world</h1>') #转义
注册+配置
参考代码如上1
模版index
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>Hello world!</h1>
{{k1}}
{{k2}}
{{k3}}
{% module Custom(123) %}
{{ tab() }}
</body>
</html>
注意:报错提示--ParseError: unknown operator: 'module',是因为tornado版本过低。使用新版本吧。