Tornado -- 2 输入和输出
输出:
输出是通过write方法实现的:
class MainHandler(tornado.web.RequestHandler): def get(self): self.write('this is my first WebServer')
查看write的源码
如果传入的不是bytes,unicode,dict,就会报错,字典类型的,会自动转化为json格式,
所以,write能够输出的格式就有三种。
现在先来看bytes和unicode:
结果:
当我们用到字典以后,
结果就会变成这样:
再回头去看截图的源码,不能发现,如果内容有字典,就直接全部转化成了json字符串了。
解决办法:self.flush() (先刷新前面的,再加载后面的)
结果:
如果需要显示列表:
结果:
总代码:
import tornado.ioloop import tornado.web import tornado.httpserver import tornado.options # 这里需要注意define和options的顺序不能换,不然define不生效 from tornado.options import define, options # 命令行运行tornado,会默认使用8080端口 # 或者python python.py --port=8000 可以自定义端口 define('port', default=8080, help='run port', type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write('hello this is my first WebServer') # unicode self.write('<br/>') self.write(b'Nice to meet you! <br/> Nice to meet you too!') # bytes self.flush() # 解决有字典全转化为json的情况 self.write({ # dict 'name': 'pywjh', 'age': 18 }) self.write('<br/>') lis = ['apple', 'bear', 'car'] # 列表可以转化为json再展示 from tornado import escape # 也可以直接用json库的json.dumps()方法 lis = escape.json_encode(lis) self.write(lis) application = tornado.web.Application( [ (r'/', MainHandler), ] ) # 类的实例化 if __name__ == '__main__': tornado.options.parse_command_line() # 打印运行日志 http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) # 绑定端口号 tornado.ioloop.IOLoop.current().start() # 开启服务器
页面渲染
输出一个完整的页面(输出文件):
前端代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>input_output</title> </head> <body> <p>你好</p> <div>很高心见到你</div> </body> </html>
后端代码:
import tornado.ioloop import tornado.web import tornado.httpserver import tornado.options # 这里需要注意define和options的顺序不能换,不然define不生效 from tornado.options import define, options # 命令行运行tornado,会默认使用8080端口 # 或者python python.py --port=8000 可以自定义端口 define('port', default=8080, help='run port', type=int)
class TemHandler(tornado.web.RequestHandler): def get(self): self.render('input_output.html') application = tornado.web.Application( handlers = [ (r'/', MainHandler), (r'/tem', TemHandler), ], template_path = 'templates' ) # 类的实例化 if __name__ == '__main__': tornado.options.parse_command_line() # 打印运行日志 http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) # 绑定端口号 tornado.ioloop.IOLoop.current().start() # 开启服务器
结果:
重定向:
结果:
追加:
命令行运行程序,每次修改都要中断再重启,有一个办法,设置debug=True,就不用这么麻烦,只要保存了,服务器就能自动重启
输入:
首先,一个请求所携带的内容,全部都在self.request里面,是一个HTTPServerRequest对象
需要什么具体的参数直接点属性就可以取出来
然后我们来看,再使用操作是进行的输入操作
首先:
但是get_argument方法,就包含了这两个方法得功能。
get请求时:
访问url:http://101.132.181.155:8080/?name=dd
结果:
访问URL:http://101.132.181.155:8080/?name=dd&name=cc
结果:
为什么get_argument()方法最后选的cc呢?
因为源码取得是最后一个~~~
post请求:
前端代码:
后端代码:
结果:
点击以后:
URL传参:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步