Tornado之输入与输出
下面直接来看代码:
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.options
from tornado.options import define,options
tornado.options.define("port",default=8080,help="run port", type=int)
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("hello hh")
self.write("<br>")
self.write(b"hello vv")
self.write("<br>")
self.flush() #不flush的话会等到最后一起保存
import time #引入time模块
time.sleep(2)
di={
"name":"xps",
"age":18
}
self.write(di) # write只能接受二进制 ,字典,字符串
self.finish() # 后面的也运行,只是不会再输出到页面上
import json
li=['xxx',18]
li = json.dumps(li) #列表转换json成字符串
self.write(li)
class TestIndexHandler(tornado.web.RequestHandler):
def get(self):
name = self.get_argument('name','no')
self.write(name)
print(name)
name = self.get_arguments('name')
print(name)
# print(self.get_query_argument('name','no')) #专门获取查询字符串url中参数
# print(self.get_body_argument('name','no')) #专门获取body内容
def post(self, *args, **kwargs): #post请求
name = self.get_argument("name","no")
psd = self.get_argument("pas","no")
self.write(name)
self.write(psd)
class TemHandler(tornado.web.RequestHandler):
def get(self):
self.render("in_out.html") #返回一个html文件
"""
<form method="post" action="/tem">
<!--action里面是路由 .将数据提交到"/tem"-->
<p>用户名<br><input type="text" name="name"></p>
<p>密码<br><input type="password" name="psd"></p>
<input type="submit">
</form>
"""
class RecHandler(tornado.web.RequestHandler):
def get(self):
self.redirect("/index") #跳转路由
class ReqHandler(tornado.web.RequestHandler):
def get(self):
self.write(self.request.remote_ip) #返回ip地址
print(self.request)
print(self.request.request_time) #返回请求时间
class SubHandler(tornado.web.RequestHandler): ###按照位置传参
def get(self,name,age):
self.write("name: %s <br> age: %s"%(name,age))
class UseSubHandler(tornado.web.RequestHandler): ###按照名字传参
def get(self,name,age):
self.write("name: %s <br> age: %s"%(name,age))
application = tornado.web.Application(
handlers = [ #handlers 固定的变量命名规则
(r"/",MainHandler),
(r"/index",TestIndexHandler),
(r"/temp",TemHandler),
(r"/rec",RecHandler),
(r"/req",ReqHandler),
(r"/sub/(.+)/([0-9]+)",SubHandler), # URL传参,正则匹配 点号. -> 除自身之外
(r"/use/(?P<name>.+)/(?P<age>[0-9]+)",UseSubHandler), # 按照名字传入参数
],
template_path = 'templates', #模板路径(这里的路径根据自己的来)
debug=True #代码保存上次之后,立即重启服务器,就不用手动重启了
)
if __name__ == "__main__":
tornado.options.parse_command_line()
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
启动服务器之后,我们可以输入use路由来试试:`127.0.0.1:8080/use/lihua/18`,此时参数直接按照名字传入。
**注:代码内容有来自潭州课堂**