Tornado 学习<1>

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 语句的格式基本完全相同。我们支持 ifforwhile 和 try,这些语句逻辑结束的位置需要用 {% end %} 做标记。还通过 extends 和 block 语句实现了模板继承。这些在 template 模块 的代码文档中有着详细的描述。

在模板中默认提供了一些函数、字段、类以供模板使用:

  • escapetornado.escape.xhtml_escape 的別名
  • xhtml_escapetornado.escape.xhtml_escape 的別名
  • url_escapetornado.escape.url_escape 的別名
  • json_encodetornado.escape.json_encode 的別名
  • squeezetornado.escape.squeeze 的別名
  • linkifytornado.escape.linkify 的別名
  • datetime: Python 的 datetime 模组
  • handler: 当前的 RequestHandler 对象
  • requesthandler.request 的別名
  • current_userhandler.current_user 的別名
  • localehandler.locale 的別名
  • _handler.locale.translate 的別名
  • static_url: for handler.static_url 的別名
  • xsrf_form_htmlhandler.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版本过低。使用新版本吧。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值