Tornado框架的简单使用
一、Tornado Web应用程序的结构
import tornado.web
class LoginHandler(tornado.web.RequestHandler):
def get(self):
self.write('www')
def post(self):
pass
#生成路由规则
application= tornado.web.Application([
(r"/login/",LoginHandler),
])
if __name__ == '__main__':
application.listen(8888) #创建socket对象并将其添加到select或者epoll中
tornado.ioloop.IOLoop.instance().start() #将select或者epoll进行死循环
Tornado Web应用程序通常由一个或多 个RequestHandler子类,一个Application将传入请求路由到处理程序的对象以及一个main()启动服务器的功能组成。
RequestHandler:Tornado Web应用程序的大部分工作是在的子类中完成的RequestHandler。主入口点的处理程序的子类是所处理的HTTP方法命名的方法:get()、post()等。每个处理程序可以定义这些方法的一个或多个来处理不同的HTTP操作。在处理程序中,调用诸如RequestHandler.render或的 方法RequestHandler.write以产生响应。
Application:负责全局配置,包括将请求映射到处理程序的路由表。
二、路由系统
tornado的路由系统是一个url对应一个类,这与django的CBV模式类似。
... #生成路由规则
application= tornado.web.Application([
(r"/login/",LoginHandler),
(r"/order/([0-9]+)", OrderHandler, dict(db=db), name="order")
]) ...
路由表是URLSpec对象(或元组)的列表,每个对象(至少包含)一个正则表达式和一个处理程序类。使用第一个匹配规则。如果正则表达式包含捕获组,则这些组是路径参数,并将传递给处理程序的HTTP方法。如果将字典作为的第三个元素传递URLSpec,则它会提供将传递给 的初始化参数RequestHandler.initialize。
三、视图函数
- 获取请求相关信息
self.get_cookie() #获取cookie
v = self.get_argument('p') #可以用于获取用户的get请求和post请求发来的数据
print(v)
self.request #封装了用户发来的所有请求(如果找不到相关请求就去request中找)
# print(type(self.request))
# from tornado.httputil import HTTPServerRequest
- 视图
import tornado.web
class LoginHandler(tornado.web.RequestHandler):
def get(self):
print(self.get_argument('p'))
self.set_cookie(‘k1’,'v1') #可以进行cookie的设置
self.set_header('k2','v2') #可以设置header
#self.write('www') #往页面上写数据
#self.redirect('/index/')#重定向
self.render('login.html')
def post(self):
print(self.get_argument('user'))
settings={
"static_path":"static", #这是放置静态文件的目录名称
"static_url_prefix":"/sta/", #这是访问静态文件引用的url前缀
"template_path":"templates"
}
#生成路由规则
application= tornado.web.Application([
(r"/login/",LoginHandler),
],**settings) #将settings传入
if __name__ == '__main__':
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/sta/commons.css" />
</head>
<body>
<h1>登陆</h1>
<form method="post">
<input type="text" name="user">
<input type="submit" value="提交">
</form>
</body>
</html>
login.html
四、模板引擎
1、模板及静态文件的配置
默认情况下,Tornado在与.py引用模板文件的目录相同的目录中查找模板文件。要将模板文件放在不同的目录中,需要在settings中进行配置(使用template_path参数),以及静态文件目录也是在settings中进行配置。
这可以在Tornado的源码中查看:


所以,可以在settings中进行设置,并且传入Application中:
settings={
"static_path":"static", #这是放置静态文件的目录名称
"static_url_prefix":"/sta/", #这是访问静态文件引用的url前缀
"template_path":"templates" #这是模板文件的目录名称
}
#生成路由规则
application= tornado.web.Application([
(r"/login/",LoginHandler),
],**settings) #将settings传入
在根目录下建立templates目录,内部生成html文件:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link rel="stylesheet" href="/sta/commons.css" /> <!--引入静态文件-->
</head>
<body>
<h1>登陆</h1> </body>
</html>
login.html
2、模板渲染
Tornado 的模板支持“控制语句”和“表达语句”,控制语句是使用 {% 和 %} 包起来的 例如 {% if len(items) > 2 %}。表达语句是使用 {{ 和 }} 包起来的,例如 {{ items[0] }}。
控制语句和对应的 Python 语句的格式基本完全相同。我们支持 if、for、while 和 try,这些语句逻辑结束的位置需要用 {% end %} 做标记。还通过 extends 和 block 语句实现了模板继承。
- 返回字符串、列表、字典
tornado_.py
class LoginHandler(tornado.web.RequestHandler):
def get(self):
# print(self.get_argument('p'))
self.render('login.html',**{'k1':'v1','k2':['v21','v22'],'k3':{'name':'王五','age':18}})
def post(self):
pass
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--<link rel="stylesheet" href="/sta/commons.css" />-->
</head>
<body>
<h1>登陆</h1> #取字符串的值
{{k1}}
#循环列表
{%for item in k2%}
{{item}}
{%end%} {{k3['name']}} #方法一、取name的值
{{k3.get('name')}} #方法二,取name的值 #循环字典
{%for k,v in k3.items()%}
{{k}}-{{v}} <br>
{%end%}
</body> </html>
- 返回函数或者类
Tornado中返回的可以是函数或者类,分别叫做UIMethod和UIModule。

(1)在utils文件夹中建立如上的uimethods.py以及UIModules.py文件
uimethods.py
def display_str(self):
print(self) #<__main__.LoginHandler object at 0x0000000003645A20>
return 'hello'
UIModules.py
from tornado.web import UIModule
from tornado.web import escape class UILogin(UIModule): #可以传参数也可以不传 UIModule中还有很多方法,可以进入查看 def embedded_css(self): return 'body{color:red}' #可以添加css样式 def css_files(self): return 'css/login.css' #可以添加css文件 def render(self, *args, **kwargs): print(self,args,kwargs) # return '<h1>login</h1>'
return escape.xhtml_escape('<h1>login</h1>') #保留标签
(2)在settings中进行注册,注意只需要导入文件名即可
from utils import uimethods as mt
from utils import uimodules as md
settings={
"static_path":"static", #这是放置静态文件的目录名称
"static_url_prefix":"/sta/", #这是访问静态文件引用的url前缀
"template_path":"templates",
"ui_methods":mt,
"ui_modules":md
}
(3)在模板文件中直接使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--<link rel="stylesheet" href="/sta/commons.css" />-->
</head>
<body>
<h1>登陆</h1> {{display_str()}} <!--UIMethods-->
<br>
{% module UILogin(123) %} <!--UIModules 可以传参数也可以不传参数--> <form method="post">
<input type="text" name="user">
<input type="submit" value="提交">
</form>
</body>
</html>
参考:http://www.tornadoweb.org/en/stable/guide/structure.html
Tornado框架的简单使用的更多相关文章
- tornado框架的简单实用
一.安装模块 pip3 install tornado 二.简单的起服务的方法 import json, datetime from tornado.web import RequestHandler ...
- tornado框架学习及借用有道翻译api做自动翻译页面
趁着这几天有时间,就简单的学了一下tornado框架,简单做了个自动翻译的页面 仅为自己学习参考,不作其他用途 文件夹目录结构如下: . ├── server.py ├── static │ └─ ...
- python运维开发(二十二)---JSONP、瀑布流、组合搜索、多级评论、tornado框架简介
内容目录: JSONP应用 瀑布流布局 组合搜索 多级评论 tornado框架简介 JSONP应用 由于浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. ...
- Tornado框架简介
-------------------简介------------------- 1.概念: Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器 ...
- tornado框架&三层架构&MVC&MTV&模板语言&cookie&session
web框架的本质其实就是socket服务端再加上业务逻辑处理, 比如像是Tornado这样的框架. 有一些框架则只包含业务逻辑处理, 例如Django, bottle, flask这些框架, 它们的使 ...
- tornado框架基础10-websocket
websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...
- Tornado 框架
Tronado为何物 Tornado全称Tornado Web Server,是一个用Python语言写成的Web服务器兼Web应用框架,由FriendFeed公司在自己的网站FriendFeed中使 ...
- 说什么也要脱单——Python WEB开发:用Tornado框架制作简易【表白墙】网站
先来哔哔两句:(https://jq.qq.com/?_wv=1027&k=QgGWqAVF) 今天我们要用Python做Web开发,做一个简单的[表白墙]网站.众所周知表白墙的功能普遍更多的 ...
- python tornado框架实现CRUD
1.本例采用postgresql数据库,创建数据表 user_tbl ),signup_date date); 2.webapi接口 (1)tornado框架配置 t_tornado.py #-*- ...
随机推荐
- HTML5 canvas绘制图形
demo.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- python实现简单接口
接口实现 import flask,json server=flask.Flask(__name__)#__name__代表当前的python文件.把当前的python文件当做一个服务启动 @serv ...
- mybatis模糊查询(转载)
原文地址:http://blog.csdn.net/luqin1988/article/details/7865643 模糊查询: 1. sql中字符串拼接 SELECT * FROM tableNa ...
- Spring中Configuration的理解
基本用途从Spring3.0,@Configuration用于定义配置类,可替换xml配置文件,被注解的类内部包含有一个或多个被@Bean注解的方法,这些方法将会被AnnotationConfigAp ...
- java并发编程笔记(十一)——高并发处理思路和手段
java并发编程笔记(十一)--高并发处理思路和手段 扩容 垂直扩容(纵向扩展):提高系统部件能力 水平扩容(横向扩容):增加更多系统成员来实现 缓存 缓存特征 命中率:命中数/(命中数+没有命中数) ...
- PHP DOMDocument操作 XML类 属性、方法
属性: Attributes 存储节点的属性列表(只读) childNodes 存储节点的子节点列表(只读) dataType 返回此节点的数据类型 Definition 以DTD或XML模式给出的节 ...
- display:inline-block在IE6/Ie7和IE8中的区别
在IE6.IE7中不识别display:inline-block属性,但使用inline-block属性在IE下会触发layout,从而使内联元素拥有了display:inline-block属性的表 ...
- npm run mock | npm run dev只能启动一个
解决方法: 开两个命令窗口 先运行npm run mock 再运行npm run dev
- 【C#学习笔记】 IDisposable 接口
在.net 编程环境中,系统的资源分为托管资源和非托管资源. 对于托管的资源的回收工作,是不需要人工干预回收的,而且你也无法干预他们的回收,所能够做的只是了解.net CLR如何做这些操作.也就是说对 ...
- day 107radis非关系型数据库
http://www.cnblogs.com/wupeiqi/articles/5132791.html 参考邮件. radis : 1. NoSql 2. 缓存在内存中 3.支持数据持久化 二. ...