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 ,否则会报错.
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,自动重启修改.
添加标题
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
查询字符串风格
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行
原文:https://www.cnblogs.com/winfun/p/10972349.html