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_ ...
随机推荐
- intelliJ IDEA运行结果不更新
无论代码怎么改,运行结果就是不更新的话,可以试一下build(这么简单的一句话,就困扰了好久,还以为自己代码有错)
- php 获得上周数据
$lastMondy = date('Y-m-d', strtotime('-2 sunday +1 days', time()));$lastSundy = date('Y-m-d', strtot ...
- Swift @objcMembers
使用@objcMembers关键字,将类中的所有方法暴露给Objc (效果等同于为所有方法加上@objc). 示例代码: @objcMembers class MyController: UIView ...
- [LOJ6041雅礼集训2017]事情的相似度
题解 \(SAM+set\)启发式合并+扫描线 首先可以发现题目要求的就是查询结尾在一段区间内的\(LCS\) 这个显然就是\(SAM\)的\(parent\)树上的\(step[LCA]\) 我们可 ...
- UOJ #35 后缀排序 哈希做法
题面 http://uoj.ac/problem/35 题解 后缀数组当然可以 这里用哈希做 首先排序的问题在哪里 在于比较两个后缀的复杂度是O(length)的 但是我们可以通过找LCP来优化比较 ...
- AtCoder Grand Contest 005 C - Tree Restoring
题目传送门:https://agc005.contest.atcoder.jp/tasks/agc005_c 题目大意: 给定一个长度为\(N\)的整数序列\(A_i\),问能否构造一个\(N\)个节 ...
- set有关的函数的用法(The SetStack Computer UVA - 12096)
#include<bits/stdc++.h> using namespace std; typedef set<int> Set; map<Set,int> ID ...
- magento 自定义url路径 和 filter data 小结
背景是往一个第三方的搜索插件里面加入filter功能. 首先是路径,插件自己定义了一个router,类似于cms.那首先说说router好了,从入口一路追查的话,会发现最后进入的是Mage_Core_ ...
- Hibernate Could not obtain transaction-synchronized Session for current thread问题处理
项目通过Hibernate查询时报出如下错误: Hibernate Could not obtain transaction-synchronized Session for current thre ...
- 019 [工具软件]窗体置顶 DeskPins
DeskPins:Windows下将任何窗体置顶的工具 官方主页:https://efotinis.neocities.org/deskpins/index.html 官方下载的是一个exe安装包,用 ...