Tornado学习之网站制作篇

Python 2016-03-13

  之前介绍过Tornado是一个多用途的Python框架,下面通过两个例子四个方面来介绍如何利用Tornado来制作网站(不适合制作大型网站)。   先看一个简单的例子:

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options

define("port", default=8888, help="run on the given port", type=int)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.current().start()

if __name__ == "__main__":
    main()

  在引入相关类库之后,在main方法中设定路径下对应方法,最后启动监听即可。后面即使拓展网站功能,相应的流程不变。   1.RequestHandler 和 Application 类   RequestHandler是用于Http请求的基础类,其中定义了一系列方法,分为入口类,输入,输出,Cookies相关,具体可以查看文档,从而完成Http相关操作。   Application可以说是一系列RequestHandler的集合,当网页收到一个请求,将在Application中先判断路径然后转发给RequestHandler处理。其中还包括了一系列注解的使用,例如 @asynchronous 注解是为了包装异步的请求,它并没有改变方法的本质,而是当程序运行时,对注解做出相应的处理,对于@asynchronous 来说,方法结束时,请求不会随之停止,如果缺少注解,请求将随程序方法的退出而结束。所以,添加正确的注解可以改进程序。   2.template类   作用在于对你定义的模板进行灵活的的操作。比如在博客网站中,在template文件中写了一个login.html文件:

 {% extends "base.html" %}
    {% block body %}
    {% if error %}
    <span style="color: red">Error: {{ error }}</span><p>
    {% end %}

    <form action="/auth/login" method="POST">
      Email: <input name="email" type="text"><br>
      Password: <input name="password" type="password"><br>
      {% module xsrf_form_html() %}
      <input type="submit">
    </form>
    {% end %}

你可以用相应的template函数对模板进行灵活替换。例如

t = template.Template("<html>{{ myvalue }}</html>")
print t.generate(myvalue="XXX")

  3.escape和locale类    escape中定义了转义和字符串操作,所谓转义包括了json,xhtml等,直接通过函数完成。也可以对字符进行编码的转换,具体参考文档。   作为一个网站框架,当然具备国际化功能,locale就提供了此类支持,可以通过tornado.locale.get()方法获取语言环境,并从CSV文件中加载语言转换翻译。

  4.websocket类    websockets可以用于浏览器和服务器之间的双向通信,实际上是基于TCP的一种协议,想详细了解的可以看这里webSocket.tornado中也有相应的方法(不了解慎用)。

  class EchoWebSocket(tornado.websocket.WebSocketHandler):
    def open(self):
        print("WebSocket opened")

    def on_message(self, message):
        self.write_message(u"You said: " + message)

    def on_close(self):
        print("WebSocket closed")

  例如在上面的方法中,服务器会对所有接收到的消息进行回应。当然,该类中还定义了一些对webSocket使用的方法,不一一解释。   (直接使用webSocket存在潜在安全漏洞,适用的安全连接是wss://

  这里,对Tornado Web 框架的介绍基本结束,关键在于实际使用中慢慢摸索。


本文由 Tony 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

赏个馒头吧