Skip to main content
 首页 » 程序教程

Tornado框架配置和模板引擎简介

2016年11月13日19543

Tornado是一个速度非常快的非阻塞式Web框架。得利于其非阻塞的方式和对epoll的运用,Tornado每秒可以处理数以千计的连接,这意味着对于实时Web服务来说,Tornado是一个理想的Web框架。下面就来看看Tornado框架配置和模板引擎简介相关内容吧。下面就来实现下面截图所示的内容吧。

Tornado框架配置和模板引擎简介

Tornao中的模板语言和django中类似,模板引擎将模板文件载入内存,然后将数据嵌入其中,最终获取到一个完整的字符串,再将字符串返回给请求者。

Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}。表达语句是使用 {{ 和 }} 包起来的,例如 {{ items[0] }}。

控制语句和对应的 Python 语句的格式基本完全相同。我们支持 if、for、while 和 try,这些语句逻辑结束的位置需要用 {% end %} 做标记。还通过 extends 和 block 语句实现了模板继承。这些在 template 模块 的代码文档中有着详细的描述。

注:在使用模板前需要在setting中设置模板路径:"template_path" : "tpl"。

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

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: for handler.static_url 的別名

xsrf_form_html: handler.xsrf_form_html 的別名

除了使用框架自带的函数外,还可以自定义UIMethod以UIModule,使用方法是在文件中引入模块,并在Tornado的配置文件中设置。具体的示例代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
演示Tornado模板语言
"""
import tornado.web
import tornado.ioloop
import uimethods as mt
import uimodules as md

title = "欢迎光临!Hello World!"
LIST_INFO = []


class IndexHandler(tornado.web.RequestHandler):
    """
    首页处理
    """

    def data_received(self, chunk):
        pass

    def get(self):
        name = self.get_argument("name", None)
        LIST_INFO.append(name) if name else print("name为空")
        self.render("index.html", title=title, list_info=LIST_INFO)

settings = {
    "template_path": "templates",  # 模板文件夹路径
    "static_path": "statics",  # 静态文件夹路径
    'ui_methods': mt,
    'ui_modules': md,
}

app = tornado.web.Application([
    (r"/index", IndexHandler),
], **settings)

if __name__ == '__main__':
    app.listen(8080)
    tornado.ioloop.IOLoop.instance().start()

以上为主文件部分,下面为模板文件部分。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <title>{{ title }}</title>
    <meta name="description" content="">
    <meta name="keywords" content="">
    <link href="{{static_url("css/style.css")}}" rel="stylesheet">
</head>
<body>
<header>
    {% block header %}{% end %}
</header>
<content>
    <form action="/index" method="get">
        <input type="text" name="name">
        <input type="submit" value="提交">
    </form>
    {% block body %}{% end %}
</content>
<footer>
    {% block footer %}{% end %}
</footer>

</body>
</html>
{% extends "main.html" %}
{% block header %}
    <h1>{{ title }}</h1>
    {# 自定义Tornado模块 #}
    {% module Custom(123) %}
    {# 自定义Tornado函数 #}
    {{ lower_str(title) }}
{% end %}

{% block body %}
    {% for index, item in enumerate(list_info) %}
        {% if index % 2 == 1 %}
            <li>{{item}}</li>
        {% else %}
            <li style="color: red">{{item}}</li>
        {% end %}
    {% end %}
{% end %}



{% block footer %}
    <p>首页结束</p>
{% end %}

自定义UIMethod以UIModule部分。

#!/usr/local/env python
# coding:utf-8
__author__ = "风轻清淡"


def lower_str(self, arg: str):
    """
    :param self:
    :param arg: str
    :return:
    """
    return arg.lower()
#!/usr/local/env python
# coding:utf-8
from tornado.web import UIModule
from tornado import escape

__author__ = "风轻清淡"


class Custom(UIModule):
    def render(self, *args, **kwargs):
        return 'UI_Modules'
阅读延展
评论列表3条评论
天下彩
天下彩回复 谢谢分享,学习了呢
风轻情淡
风轻情淡回复 不客气
森纯博客
森纯博客回复 支持
发表评论