摘要:而这里的方法则是告诉来读取模板文件,并将结果返回给浏览器。依旧可以使用,等条件控制语句,但是要记得以结尾。替换字符串中的字符为编码形式。模块模块是封装模板中包含的标记样式以及行为的可复用组件。
表单和模板
import os.path import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): self.render("index.html") class PoemPageHandler(tornado.web.RequestHandler): def post(self): noun1 = self.get_argument("noun1") noun2 = self.get_argument("noun2") verb = self.get_argument("verb") noun3 = self.get_argument("noun3") self.render("poem.html", roads=noun1, wood=noun2, made=verb, difference=noun3) if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r"/", IndexHandler), (r"/poem", PoemPageHandler)], template_path=os.path.join(os.path.dirname(__file__), "templates") ) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
这个表单包括了多个文本,其中的内容在用户点击提交之后以POST请求的方式发送到/poem。Tornado为了响应这个请求会自动跳到poem.html,并且插入你在表单中填写的值。
渲染摸板这和我在第一章里看到的例子差不多RequestHandler传给tornado.web.Application对象。但是还是有区别的,首先是传递了一个template_path参数。template_path参数告诉Tornado在哪里寻找模板文件。而这里的self.render()方法则是告诉Tornado来读取模板文件,并将结果返回给浏览器。
然而这里的index.html并不完整,它的确是一个已经写好的HTML标记,但是一般情况下我们会输出我们所希望HTML结合程序传入给模板的值。{{}}所括起来的字符串,括起来的字符串就是占位符,我们在渲染模板的时候会希望以实际的值代替。这里还是可以通过render()函数传递所希望表达出来的关键字参数。例如这里的:
self.render("poem.html", roads=noun1, wood=noun2, made=verb, difference=noun3)
这里就告诉模板我们将传入的参数。
这里的{{}}可以填充任意的Python表达式:
>>> from tornado.template import Template >>> print Template("{{2+3}}").generate() 5 >>> print Template({{"gogogojuststudy"[-5:]}}").generate() study >>>
同样可以在Tornado模板中使用条件和循环语句。控制语句以{% %}包围。
一般以{%if condition%}。依旧可以使用for,while等条件控制语句,但是要记得以{%end %}结尾。
这里有其他的一些默认提供的一些便利的函数:
escape() #替换字符串中的&、为他们对应的HTML字符
url_escape() #使用urlib。quote_plus替换字符串s中的字符为URL编码形式。
squeeze() #过滤字符串,把连续的多个空白字符替换成一个空格模板扩展
Tornado可以方便我们扩展一个已经存在的模板,只需要在新的模板文件顶部放上{%extends “filename.html”%}这里便是使得新的HTML文件继承了父HTML文件的所有标签。
这里我们就需要用到块了,block语句可以帮助我们改变一些模板元素。每个{%block %}对应一个{% end%}。
UI模块是封装模板中包含的标记、样式以及行为的可复用组件。它所定义的元素通常用于多个模板交叉复 用或在同一个模板中重复使用。模块本身是一个继承自Tornado的UIModule类的简单Python类,并定义 了一个render()方法。
import tornado.web import tornado.httpserver import tornado.ioloop import tornado.options import os.path from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class HelloHandler(tornado.web.RequestHandler): def get(self): self.render("hello.html") class HelloModule(tornado.web.UIModule): def render(self): return "Hello, world!
" if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application( handlers=[(r"/", HelloHandler)], template_path=os.path.join(os.path.dirname(__file__), "templates"), ui_modules={"Hello": HelloModule} ) server = tornado.httpserver.HTTPServer(app) server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
这个例子里ui_module字典里只有一项,这里把名为Hello模块的引用和定义的HELLOMODULE结合起来。当我们调用HelloHandler并渲染hello.html时,可以使用{% module Hello()%}模板标签来包含HelloModule中render()方法返回的字符串。
例如在这里:
UI Module Example {% module Hello() %}
这里通过模板标签自身的位置调用HelloModule返回的字符串进行填充。
嵌入JavaScript和CSS为了给这些模块提供更高的灵活性,Tornado允许你使用embedded_css和embedded_javascript方法嵌 入其他的CSS和JavaScript文件
不仅仅是可以返回一个JavaScript和CSS规则,而且更加灵活的是在闭合的标签前添加完整的HTML标记。
你可以使用javascript_files()和css_files()来 包含完整的文件,不论是本地的还是外部的。
def css_files(self): return "/static/css/newreleases.css"
def javascript_files(self): return"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.14/jquery-ui.min.js"
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/37646.html
摘要:对参数类型进行检验,这里为当参数类型不合适是会抛出一个异常。将使用的第二个参数值作为默认值。而请求将从格式中取得指定的文本。这里需要正则表达式相关的知识,到了后面的学习中,必要时再去深入学习。到目前我们使用了,还支持任何合法的请求。 参考书籍《Introduction to Tornado》1.1 Tornado是什么?Tornado是使用Python编写的一个强大的、可扩展的Web服...
摘要:首先是的请求接着是的请求在本次分享中,我们介绍了的请求,包括请求,并将介绍如何使用和来测试该本次分享到此结束,欢迎大家交流 Tornado是现在的主流 Web 服务器框架,它与大多数 Python 的框架有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,T...
摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...
摘要:从的开始分析的源码很容易可以看出,通过继承类定义自己的处理类,来处理请求。类的对象来处理的路由将于处理类组成,关联起来。调用的来将和绑定在一起初始化一个的对象,由其来处理请求的路由,来利用建立的规则。 从tornado的 Hello,world 开始分析tornado的源码 pythonimport tornado.ioloop import tornado.web class M...
阅读 1203·2021-11-17 09:33
阅读 3599·2021-09-28 09:42
阅读 3326·2021-09-13 10:35
阅读 2478·2021-09-06 15:00
阅读 2438·2021-08-27 13:12
阅读 3609·2021-07-26 23:38
阅读 1825·2019-08-30 15:55
阅读 539·2019-08-30 15:53