python 框架tornado_python 中的tornado框架的总结

以下是经典的 “Hello, world” 示例:

import tornado.ioloop

import tornado.web

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("Hello, world")

application = tornado.web.Application([

(r"/", MainHandler),

])

if __name__ == "__main__":

application.listen(8888)

tornado.ioloop.IOLoop.instance().start()

请求处理程序和请求参数

Tornado 的 Web 程序会将 URL 或者 URL 范式映射到 tornado.web.RequestHandler 的子类上去。在其子类中定义了get() 或 post() 方法,用以处理不同的 HTTP 请求。

下面的代码将 URL 根目录 / 映射到 MainHandler,还将一个 URL 范式 /story/([0-9]+) 映射到 StoryHandler。正则表达式匹配的分组会作为参数引入 的相应方法中:

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write("You requested the main page")

class StoryHandler(tornado.web.RequestHandler):

def get(self, story_id):

self.write("You requested the story " + story_id)

application = tornado.web.Application([

(r"/", MainHandler),

(r"/story/([0-9]+)", StoryHandler),

])

你可以使用 get_argument() 方法来获取查询字符串参数,以及解析 POST 的内容:

class MainHandler(tornado.web.RequestHandler):

def get(self):

self.write('

' '' ''

'

') def post(self): self.set_header("Content-Type", "text/plain")

self.write("You wrote " + self.get_argument("message"))

上传的文件可以通过 self.request.files 访问到,该对象将名称(HTML元素 的

name 属性)对应到一个文件列表。每一个文件都以字典的形式

存在,其格式为 {"filename":...,

"content_type":..., "body":...}。

如果你想要返回一个错误信息给客户端,例如“403

unauthorized”,只需要抛出一个 tornado.web.HTTPError 异常:

if not self.user_is_logged_in():

raise tornado.web.HTTPError(403)

请求处理程序可以通过 self.request 访问到代表当前请求的对象。该 HTTPRequest 对象包含了一些有用的属性,包括:

arguments -

所有的 GET 或 POST 的参数

files -

所有通过 multipart/form-data POST

请求上传的文件

path -

请求的路径( ? 之前的所有内容)

headers -

请求的开头信息

模板

你可以在 Tornado 中使用任何一种 Python 支持的模板语言。但是相较于其它模板而言, Tornado

自带的模板系统速度更快,并且也更灵活。具体可以查看

Tornado 模板其实就是 HTML 文件(也可以是任何文本格式的文件),其中包含了 Python

控制结构和表达式,这些控制结构和表达式需要放在规定的格式标记符(markup)中:

{{ escape(item) }}

{% end %}

如果你把上面的代码命名为 "template.html",保存在 Python 代码的同一目录中,你就可以 这样来渲染它:

class MainHandler(tornado.web.RequestHandler):

def get(self):

items = ["Item 1", "Item 2", "Item 3"]

self.render("template.html", title="My title", items=items)

Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的

例如 {% if

len(items) > 2 %}。表达语句是使用 {{ 和 }} 包起来的,例如 {{

items[0] }}。

控制语句和对应的 Python 语句的格式基本完全相同。我们支持 if、for、while 和 try,这些语句逻辑结束的位置需要用 {%

end

%} 做标记。我们还通过 extends 和 block 语句实现了模板继承。这些在 template 模块 的代码文档中有着详细的描述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值