tornado框架基础02-输入和输出
01 输出
write
bytes类型
class IndexHandler(tornado.web.RequestHandler):
def get(self):
self.write(b'Tornado ')
字典类型
user = {
'name': 'budong',
'age': 18
}
self.write(user)
当传字典进去 不解析了.因为遇到json类型数据将所有内容全部转成json字符串格式,导致换行符不解析.
unicode
self.write('Tornado ')
其他
li = [1, 2, 3, 4]
import json
li = json.dumps(li)
self.write(li)
print(repr(li))
li = json.loads(li)
print(repr(li))
接受对象
write可以接受 bytes、unicode字符和字典这个三个对象.
如果接受的是字典,会把字典转化成 JSON 字符串,因此write也可以接受 JSON 字符串
python2中首行加# -*-coding:UTF-8 -*- 说明编码格式,
flush
self.flush()
time.sleep(3)
self.write('Tornado ')
缓冲区
write 会先把内容放在缓冲区,正常情况下,当请求处理完成的时候会自动把缓冲区的内容输出到浏览器,但是可以调用 flush 方法,这样可以直接把缓冲区的内容输出到浏览器,不用等待请求处理完成 :
render:
返回 HTML
class TemHandler(tornado.web.RequestHandler):
def get(self):
self.render('01in_out.html')
通过 render 可以返回一个 html 文件
Application中的设置:
template_path='templates',
想要 Tornado 能够正确的找到 html 文件,需要在 Application 中指定文件的位置
redirect
跳转路由
class RecHandler(tornado.web.RequestHandler):
def get(self):
import time
time.sleep(3)
self.redirect(r'/tem')
通过 redirect 可以跳转到指定的路由
路由
(r'/rec', RecHandler),
finish
结束请求
self.finish()
self.write('finish')
finishi后面的代码会执行,但不会显示到浏览器.
当调用 finish 之后,请求处理完成,类似于函数中的 return (注意:请求当中不能出现return) ,其后不能再执行 write ,否则会报错.
02 获取请求信息
self.request
handler
class ReqHandler(tornado.web.RequestHandler):
def get(self):
self.write(self.request.remote_ip)
print(self.request.remote_ip)
print(self.request.full_url())
print(self.request.request_time())
继承类 tornado.web.RequestHandler 之后 ,可以直接调用 self.request 来获取客户端请求信息
| method | HTTP请求方法,例如 GET 或 POST |
|---|---|
| remote_ip | 客户端的IP地址,返回值类型为字符串 |
| full_url() | 重新构建此请求的完整URL |
| request_time() | 返回此请求执行所花费的时间 |
| uri | 请求的完整uri |
| path | 路径部分的uri |
| query | 查询部分的uri |
| version | 请求中指定的HTTP版本,例如“HTTP / 1.1” |
application设置debug=True,自动重启修改.
03 输入
添加标题
class GetHandler(tornado.web.RequestHandler):
def get(self):
name = self.get_argument('name', 'no')
self.write(name)
self.write(' ')
name = self.get_arguments('name')
self.write(' '.join(name))
#get_arguments把传的所有参数全都传到列表里,get_argument只存最后一个.get_argument底层调用get_arguments,取最后一个值
获取表单数据.
def post(self, *args, **kwargs):
name = self.get_argument('name', 'no')
passwd = self.get_argument('password', 'none')
self.write('user: %s password: %s' % (name, passwd))
获取 URL 数据
get_argument可以获取 URL (查询字符串)中的参数
获取 body 数据
get_argument可以获取 body (请求体)中的数据,get_argument返回的值始终是unicode
get_query_argument #查询字符串中的参数
self.get_query_argument('name', 'query')
获取查询字符串中参数,对应的也有:get_query_arguments
get_body_argument #获取表单的body
self.get_body_argument('name', 'body')
获取 body 中的参数,对应的也有: get_body_arguments
04 url传参
查询字符串风格
class GetHandler(tornado.web.RequestHandler):
def get(self):
name = self.get_argument('name', 'no')
路由 (r'/get', GetHandler) URL http://127.0.0.1:8000/get?name=budong
REST风格
class UserHandler(tornado.web.RequestHandler):
def get(self, name, age):
self.write('name: %s age: %s' % (name, age))
class StudentHandler(tornado.web.RequestHandler):
def get(self, name, number):
self.write('name: %s number: %s' % (name, number))
路由
(r'/user/(.+)/([0-9]+)', UserHandler), #参数必须按照顺序
(r'/stu/(?P<number>[0-9]+)/(?P<name>.+)', StudentHandler), #?P加了标签
URL
http://127.0.0.1:8000/user/budong/18
http://127.0.0.1:8000/stu/20170001/budong
查询字符串
查询字符串通过在路由后面添加 ? 在加上参数名和参数值来传入参数
REST
通过 / 来分割每个参数,关键在于 get 方法定义
驼峰命名法
大驼峰:MainHandler 类
小驼峰:mainHandler
下划线:main_handler python规范
正式代码与导包空1行
类代码与正式代码之间空2行
最外面的函数和代码之间空2行
tornado框架基础02-输入和输出的更多相关文章
- tornado 01 路由、输入与输出
tornado 01 路由.输入与输出 一.安装tornado pyvip@Vip:~$ workon py3env #安装python3的虚拟环境 (py3env) pyvip@Vip:~$ pip ...
- Python基础篇--输入与输出
站长资讯平台:Python基础篇--输入与输出在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和输出输出输入END在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和 ...
- tornado框架基础01-路由简介
tornado 小而精 Django 大而全 Web框架 Tornado是一个由Python开发的Web框架 Web服务 利用Tornado,可以快速搭建和一个高性能的Web服务 非阻塞 Tornad ...
- tornado框架基础10-websocket
websocket 01 长轮询 在网页,我们经常扫码登录,结合之前的学习的知识点,来思考下,前端是如何知道用户在手机上扫码登录了呢? 长轮询:客户端不断的向服务器发送请求 缺点: \1. 开销大 \ ...
- tornado框架基础11-tornado异步
01 同步和异步 生活中常常会遇到在超市排队买东西的情况,排在你前面的人没有结算完成,你就无法付账,在计算机中也有类似的情形,一个程序在执行之前,需要等待其他的程序执行完成,大家还能举出其他的例子吗? ...
- tornado框架基础09-cookie和session
01 cookie 在上节,我们简单了解了登录过程,但是很明显,每次都需要登录,但是在平常逛网站的只需要登录一次,那么网站是如何记录登录信息的呢? 有没有什么办法可以让浏览器记住登录信息,下次再次打开 ...
- tornado框架基础03-请求与响应
01 请求与响应 请求 浏览器在发送请求的时候,会发送具体的请求信息,由请求行,请求消息头,请求正文 请求消息头 向服务器传递附加信息 Accept: 浏览器可以接受的MIME类型. Accept-C ...
- Python学习--02输入和输出
命令行输入 x = input("Please input x:") y = raw_input("Please input x:") 使用input和raw_ ...
- Python学习--02输入和输出、运算符
命令行输入 x = input("Please input x:") y = raw_input("Please input x:") 使用input和raw_ ...
随机推荐
- Jquery | 基础 | 慕课网 | 基本筛选选择器
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-type" content ...
- C/C++ 动态库so的生成与调用
1. Linux-(C/C++)动态链接库生成以及使用(libxxx.so) 2. C++文件如何在linux下生成动态库So,以及如何使用这个动态库 3. c++ 发布动态.so 简记1. 编译生成 ...
- subline应用之常用插件
汉化插件:ChineseLocalzations IMESupport插件:解决软件输入法跟随问题 SublimeREPL插件:可以用于运行和调试一些需要交互的程序如python SublimeCod ...
- Unity中所有特殊的文件夹
1. 隐藏文件夹以.开头的文件夹会被Unity忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.2. Standard Assets在这个文件夹中的脚本最先被编译 ...
- qconshanghai2014
主题演讲 容器化的云——CohesiveFT首席技术官 Chris Swan 建设强大的工程师文化——Spotify工程总监 Kevin Goldsmith 软件项目变更的管理和生存之道——jClar ...
- 常用的HTML5 pattern属性
type="tel" 和 type="number" 的区别 这里还是先那么先交代一下最初遇到的问题.其实无论是tel还是number都不是完美的: type= ...
- CF622C Not Equal on a Segment
题目链接: http://codeforces.com/problemset/problem/622/C 题目大意: 给定一个长度为n(n不超过200000)的序列,有m(m不超过200000)次询问 ...
- CF779B(round 402 div.2 B) Weird Rounding
题意: Polycarp is crazy about round numbers. He especially likes the numbers divisible by 10k. In the ...
- JAVA解析XML的几种方法
DOM DOM Document Object Model 文档对象模型.在应用程序中,基于DOM的解析器将一个XML文档转换成一个对象模型的集合(DOM树),应用程序正是通过对这个对象模型的操作,来 ...
- 打开centos直接进入文本模式命令行
2.打开/etc/inittab 文件 #vim /etc/inittab3.在默认的 run level 设置中,可以看到第一行书写如:id:5:initdefault:(默认的 run level ...