
正文
tornado输入-get_query_argument()等 笔记
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
最外面的代码结构
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler# 使用tornado.options定义全局变量
tornado.options.define('port', type=int, default=8000, help="服务器端口")class IndexHandler(RequestHandler):
def get(self):
self.write('OK')if __name__ == '__main__':
options.parse_command_line() # 转换命令行参数,并将其设置在全局变量上
app = tornado.web.Application([
(r'/', IndexHandler),
], debug=True) # debug关联四个启动
http_server = tornado.httpserver.HTTPServer(app) # 监听套间字
http_server.listen(options.port) # 监听端口
tornado.ioloop.IOLoop.current().start() # 循环线程事件
值得注意的是:
debug包含四个内容,分别是:原文件是否被改变/缓存模板是否要消除/静态文件的hash是否消除/和异常捕获,对应:autoreload/compiled_template_cache/static_hash_cache/serve_traceback
get_query_argument()/get_query_arguments()/get_body_argument()/get_body_arguments()
上述四个获取值方法统一参数:(name, default=_ARG_DEFAULT, strip=True)
# name:获取name属性的值
default:设置默认值,如果没有参数传递过来,那么就是用默认值
strip: 去除左右空格
# 使用get方式传递参数
def get(self):
# 获取单个键值
get_a = self.get_query_argument('a') # 如果同时传递多个a的参数,那么会采用后面覆盖前面的原则
self.write(get_a)
# 其中获取多个使用:get_query_arguments()
# 使用post传递参数
def post(self):
# 接收单个参数
post_a = self.get_body_argument('a')
self.write(post_a)
# 其中获取多个参数传递使用get_body_arguments()
使用get_argument()/get_arguments()可以不区分post/get传递方式
def post(self):
# 接收单个参数
post_a = self.get_argument('a')
self.write(post_a)
# 其中获取多个参数传递使用get_arguments()
值得注意的是:使用上述方法获取参数只能够获取headers报头为"application/x-www-form-urlencoded"或者"multipart/form-data"的数据,如果想获取json或者xml方式传递的数据需要使用self.request方式获取
def post(self):
self.write(self.request.headers.get('Content-Type')) # 获取“application/json”类型传递
# 如果想获取内容,可以使用self.request.body
上述代码结构还可以这样写
import tornado.web
import tornado.ioloop
import tornado.options
import tornado.httpserver
from tornado.options import options
from tornado.web import RequestHandler, urltornado.options.define('port', type=int, default=8000, help="服务器端口")class IndexHandler(RequestHandler):
def get(self):
self.write('<a href="' + self.reverse_url('numhref') +'">href</a>')class HrefUrl(RequestHandler):
def initialize(self, new_url):
self.new_url = new_url
def get(self):
# self.write(self.new_url)
self.redirect(self.new_url) # 自动跳转百度页面if __name__ == '__main__':
options.parse_command_line()
app = tornado.web.Application([
(r'/', IndexHandler),
url(r'/num', HrefUrl, {'new_url': 'http://www.baidu.com'}, name='numhref') # 设置关键子参数和使用name
], debug=True)
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
tornado.ioloop.IOLoop.current().start()






