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_handlerpython 规范
正式代码与导包空 1 行
类代码与正式代码之间空 2 行
最外面的函数和代码之间空 2 行
来源: http://www.bubuko.com/infodetail-3081933.html