2.输入和输出
一、输出
1.self.write()
self.write("要输出的文字")
2.self.write() #以变量输出
class OutInHandler(tornado.web.RequestHandler): def get(self): name = self.get_argument("name","no") self.write(name)
只需要在路由表加上相应的列表即可
import tornado.ioloop #I/O事件循环 import tornado.web #web服务 import tornado.httpserver #单线程的HTTP服务 import tornado.options #命令行解析模块,让模块定义自己的选项 from tornado.options import define,options define('port',default=8000,help='run port',type=int) class MainHandler(tornado.web.RequestHandler): def get(self): self.write("你好,素心!!!") class OutInHandler(tornado.web.RequestHandler): def get(self): name = self.get_argument("name","no") self.write(name) #路由表,其实就是将以上类实例化,然后赋值http_server application = tornado.web.Application( [ (r"/main",MainHandler), (r"/get",OutInHandler), ] ) if __name__ == "__main__": tornado.options.parse_command_line() http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
加上name参数之后,前端显示该信息,如果没有name,则默认no(并不是空);如果get_arguments(),输入两个参数,即“name='suxin'&name=SuXin”,则传输最后一个,在后台以列表形式记录提交信息。
通常经过URL传参。
输出的类型换成列表则报错
TypeError: write() only accepts bytes, unicode, and dict objects. Lists not accepted for security reasons; see http://www.tornadoweb.org/en/stable/web.html#tornado.web.RequestHandler.write
英语不大好,只能百度翻译了,大致意思就是:只接受bytes,unicode和dict对象。
如果需要传递列表,则将列表放进字典即可
3.self.flush() #将所有输出内容编程json格式
即:输出的<br>等前端语言可以编译
4.输出指定的HTML文件(self.render())
class TeamHandler(tornado.web.RequestHandler): def get(self): self.render('01.InOut.html')
template_path = "templates", #配置HTML文件路径
还需在配置路由表里面添加上HTML文件路径
在这里出现问题较多,排错方法如下
①检查HTML文件的路径;
②不要忘记配置路由;
③检查本地py是否同步到服务器。
5.路由跳转,路由配置不再示范,只展示Handler部分
class RecHandler(tornado.web.RequestHandler): def get(self): time.sleep(3) self.redirect('/team') #路由跳转
此处睡眠三秒,以便效果明显,一般项目中是通过鼠标动作完成跳转的
6.获取访问客户端的IP地址
class ReqHandler(tornado.web.RequestHandler): def get(self): self.write(self.request.remote_ip) #获取访问客户端IP地址
7.常见的方法
二、输入
def post(self, *args, **kwargs): name = self.get_argument("name","no") password = self.get_argument("password","no") self.write("用户名:%s,密码:%s"%(name,password))
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>tornado</title> </head> <body> <form method="post" action="/get"> <p>用户名 <input type="text" name="name"></p> <p>密 码 <input type="password" name="password"></p> <p><input type="submit"> <input type="reset"></p> </form> </body> </html>
获取URL里的参数,然后显示在网页上
三、传参
1.通过URL传参,不用?形式,通过位置传参
class UserHandler(tornado.web.RequestHandler): def get(self,name,age): self.write("name: %s <br> age: %s"%(name,age))
这里的路由需要变化,使用正则
(r"/user/(.+)/([0-9]+)",UserHandler),
2.通过关键字传参
(r"/user/(?P<age>[0-9]+)/(?P<name>[.]+)",UserHandler),