Tornado基本使用
文章目录
- Tornado的安装
- Tornado基本使用
- Tornado各种url写法
- 配置settings & 获取get,post请求
- Tornado渲染
- Tornado多文件上传
Tornado的安装
1、pip3安装pip3 install tornado2、源码安装https://pypi.python.org/packages/source/t/tornado/tornado-4.3.tar.gz
Tornado基本使用
import tornado.ioloop
import tornado.web#1、 处理访问/index/的get请求: http://127.0.0.1:8888/index/
class MainHandler(tornado.web.RequestHandler):def get(self):self.write("I am index!!")# self.redirect('http://www.baidu.com')# self.render('index.html',k1='v1')#2、 处理访问 /login/的post请求和get请求: http://127.0.0.1:8888/login/
class LoginHandler(tornado.web.RequestHandler):def get(self):self.write('login')def post(self,*args,**kwargs):self.write('login post')#3、 配置settings
settings = {'template_path': 'template', # 配置html文件模板位置'static_path': 'static', # 配置静态文件路径(图片等)'static_url_prefix': '/static/', # 前端引入静态文件路径
}#4 路由系统
application = tornado.web.Application([(r"/index/", MainHandler),(r"/login/", LoginHandler),
],**settings)#5 启动这个tornado这个程序
if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()
Tornado各种url写法
- 无正则匹配url (http://127.0.0.1:8000/index/?nid=1&pid=2)
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):nid = self.get_query_argument('nid')pid = self.get_query_argument('pid')self.write("Hello, world")# http://127.0.0.1:8000/index/?nid=1&pid=2
application = tornado.web.Application([(r"/index/", MainHandler),
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()
- 基于(\d+)正则的url
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self,nid,pid):print(nid,pid)self.write("Hello, world")# http://127.0.0.1:8000/index/1/2/
application = tornado.web.Application([(r"/index/(\d+)/(\d+)/", MainHandler), # 这种只能传数字# (r"/index/(\w+)/(\w+)/", MainHandler), # 这种可以传数字、字母、下划线
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()
- 基于正则分组(?P\d+),可以不考虑接收参数顺序 (推荐)
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self,nid,pid):print(nid,pid)self.write("Hello, world")# http://127.0.0.1:8000/index/1/2/
application = tornado.web.Application([(r"/index/(?P<nid>\d+)/(?P<pid>\d+)/", MainHandler), # 这种只能传数字
])if __name__ == "__main__":application.listen(8000)tornado.ioloop.IOLoop.instance().start()
配置settings & 获取get,post请求
- settings可配置参数
settings = {'template_path': 'template', #配置html文件模板位置'static_path': 'static', #配置静态文件路径(图片等)'static_url_prefix': '/static/', #前端引入静态文件路径'ui_methods': mt,'ui_modules': md,'xsrf_cookies':True,'cookie_secret':'xxx','login_url':"/auth/login",'autoescape':None,'local':"zh_CN",'debug':True,
- 获取get、post请求
app.py
import tornado.ioloop
import tornado.web#1、 处理访问/index/的get请求: http://127.0.0.1:9999/index
class MainHandler(tornado.web.RequestHandler):def get(self):self.write("I am index!!")# self.redirect('http://www.baidu.com')# self.render('index.html',k1='v1')#2、 处理访问 /login/的post请求和get请求: http://127.0.0.1:9999/login
class LoginHandler(tornado.web.RequestHandler):def get(self):#2.1 获取url中以get方式传递过来的数据: http://127.0.0.1:9999/login/?username=zhangsan# print(self.get_query_argument('username')) # zhangsan# print(self.get_query_arguments('username')) # ['zhangsan']# print( self.get_argument('username') ) # get和post两种请求传递的数据都能获取self.render('login.html')def post(self,*args,**kwargs):#2.2 获取请求体中以post传递的数据# print( self.get_body_argument('faver') ) # 仅能获取单选,多选仅能获取最后一个# print( self.get_body_arguments('faver') ) # ['1', '2', '3'] 获取多选#2.3 get和post两种请求传递的数据都能获取# print( self.get_argument('username') )#2.4 设置和获取cookie# self.cookies# self.set_cookie()#2.5 设置和获取请求头# self._headers# self.get_header()self.write('login post')#3、 配置settings
settings = {'template_path': 'template', # 配置html文件模板位置'static_path': 'static', # 配置静态文件路径(图片等)'static_url_prefix': '/static/', # 前端引入静态文件路径
}#4 路由系统
application = tornado.web.Application([(r"/index/", MainHandler),(r"/login/", LoginHandler),
],**settings)#5 启动这个tornado这个程序
if __name__ == "__main__":application.listen(9999)tornado.ioloop.IOLoop.instance().start()
- /templates/login.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="/static/base.css">
</head>
<body><form method="POST" action="/login/"><input type="text" name="username"><h5 class="c1">多选</h5>男球:<input type="checkbox" name="faver" value="1" />足球:<input type="checkbox" name="faver" value="2" />皮球:<input type="checkbox" name="faver" value="3" /><input type="submit" value="提交"></form>
</body>
</html>
- /templates/base.css
.c1{color: red;
}
Tornado渲染
- for循环
app.py
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render("index.html", username='tom',list_info=[11, 22, 33],user_dic={'username':'zhangsan','age':77})application = tornado.web.Application([(r"/index", MainHandler),
])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h3>用户名:{{username}}</h3>{% for item in list_info %}<li>{{item}}</li>{% end %}<p></p>{% for item in user_dic %}<li>{{item}} : {{user_dic[item]}}</li>{% end %}
</body>
</html>
- if、in、判断相等
app.py
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render("index.html", list_info=[11, 22, 33],username='tom')application = tornado.web.Application([(r"/index", MainHandler),
])if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()
index.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>{% if 11 in list_info %}true{% else %}false{% end %}{% if username == "tom" %}my name is {{username}}{% else %}not tom{% end %}
</body>
</html>
Tornado多文件上传
app.py
import tornado.ioloop
import tornado.webclass MainHandler(tornado.web.RequestHandler):def get(self):self.render('index.html')def post(self, *args, **kwargs):file_metas = self.request.files["fff"]for meta in file_metas:file_name = meta['filename']with open(file_name,'wb') as up:print('hahah')up.write(meta['body'])settings = {'template_path': 'template',
}application = tornado.web.Application([(r"/index", MainHandler),
], **settings)if __name__ == "__main__":application.listen(8888)tornado.ioloop.IOLoop.instance().start()
index.html
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/><title>上传文件</title>
</head>
<body><form id="my_form" name="form" action="/index" method="POST" enctype="multipart/form-data" ><input name="fff" id="my_file" type="file" /><input type="submit" value="提交" /></form>
</body>
</html>
Tornado基本使用相关推荐
- python tornado教程_Tornado 简单入门教程(零)——准备工作
前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...
- python中tornado的第一个例子
python中tornado的第一个例子 1 先安装tornado pip install tornado 2 新建tor.py 记住不能建立 tornado.py 这样的名字 不然会报错 Imp ...
- tornado+nginx上传视频文件
[http://arloz.me/tornado/2014/06/27/uploadvideotornado.html] [NGINX REFRER: Nginx upload module] 由于t ...
- tornado源码分析
tornado源码分析 本源码为tornado1.0版本 源码附带例子helloworld import tornado.httpserver import tornado.ioloop import ...
- Tornado自定义分布式session框架
Tornado自定义分布式session框架 一.session框架处理请求执行的流程: 1.服务器端生成随机的cookie字符串 2.浏览器发送请求,服务器将cookie返回给浏览器. 3.服务器在 ...
- tornado 入门
Overview FriendFeed是一款使用 Python 编写的,相对简单的 非阻塞式 Web 服务器.其应用程序使用的 Web 框架看起来有些像 web.py 或者 Google 的 weba ...
- python web项目案例教程_Python Web开发案例教程(慕课版)——使用Flask、Tornado、Django...
第1章 Web开发基础1 1.1 Web概述 2 1.1.1 什么是Web 2 1.1.2 Web应用程序的工作原理 2 1.1.3 Web的发展历程 2 1.2 Web前端开发基础 4 1.2.1 ...
- sae python连接mysql_SAE Tornado 应用连接并使用 Mysql
今天因为要提供几个开放的接口给我毕设相关的平台调用,所以又开始折腾之前在SAE上搭的Tornado应用. 之前记录过一个 如何在 SAE 上使用 Tornado,这次续上,关于在SAE里使用Torna ...
- tornado 09 cookie和session
tornado 09 cookie和session 一.cookie #有什么办法能够让浏览器记住登录信息,下次再打开的时候可以自动登录?网站是如何记录登录信息的? class SetCookieHa ...
- python协程异步原理_简单介绍Python的Tornado框架中的协程异步实现原理
Tornado 4.0 已经发布了很长一段时间了, 新版本广泛的应用了协程(Future)特性. 我们目前已经将 Tornado 升级到最新版本, 而且也大量的使用协程特性. 很长时间没有更新博客, ...
最新文章
- rocketmq同步发送超时时间_RocketMQ系列(一)基本概念
- c/c++反混淆方法
- linux网路编程之多进程并发服务器
- Struts2工作流程
- MATLAB R2021b for Mac(可视化数学分析软件)
- 阿里云成为云原生计算基金会金牌会员
- eNSP 华为模拟器更新说明
- FFT蝶形算法,IFFT
- NET Reflector 7.6.1.824安装及破解
- Oracle数据库之oracle update set select from 关联更新
- IP根域名服务器以及域名服务器对国家安全的真正意义。
- HYSBZ - 1086:王室联邦(树上分块?)
- Visual Studio的正确打开方式|9中种常见错误
- 激光雷达运动物体分割论文汇总(2021-2022)
- Login 2020:技术唤醒她力量进行时
- 金蝶KIS旗舰版V5.0安装报错问题总结
- 电脑发热严重:禁用独立显卡(Nvidia)/ TLP解决cpu占用率大
- statement和prepareStatement 的区别
- 空间域滤波与频率域滤波比较
- windows无法读取驱动器中的光盘(windows10)
热门文章
- 数据中心进行数字化转型的2019年
- 大型数据中心蓄电池规划与应用中的痛点及展望
- 机房承重标准及承重计算方法
- java web视频_超全面的JavaWeb视频教程
- 8分频verilog线_Verilog设计分频器(面试必看)
- nbu 恢复oracle数据库,关于使用nbu重定向恢复oracle数据库rman报错
- ML之kNNC:基于iris莺尾花数据集(PCA处理+三维散点图可视化)利用kNN算法实现分类预测daiding
- IDE之Eric:Python的IDE之eric的简介、安装、使用方法之详细攻略
- CentOS7修改默认运行级别
- js记录用户访问页面和停留时间