Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用
基本操作
tornado_base.py
# Author:song import tornado.ioloop import tornado.web #配置信息 settings = { 'static_path':'static', 'static_url_prefix':'/song/',#别名 'template_path':'templates', } class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") #返回数据 class LoginHandler(tornado.web.RequestHandler): def get(self): #self.get_argument('p') 获取请求参数,相当于django的request.GET.get('p') #self.get_body_argument('name') 获取post内容信息 #self.set_cookie('k1','v1')设置cookie #self.set_header('h1','v1')设置请求头 self.render("login.html",**{'k1':'song','k2':'shi','k3':[1,2,3,4],'k4':{'name':'a','age':18}}) #返回模板 def post(self, *args, **kwargs): print(self.get_argument('user')) self.redirect('https://home.cnblogs.com/u/master-song/')#重定向 #路由规则 application = tornado.web.Application([ (r"/index", MainHandler), (r"/login", LoginHandler), ],**settings) if __name__ == "__main__": #创建socket对象,将其加入select application.listen(8888) #开始循环监听 tornado.ioloop.IOLoop.instance().start()
模板login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="/song/comment.css"/> <title>Title</title> </head> <body> <h1>login</h1> {{k1}} {{k2}} <h1>列表</h1> <ul> {% for i in k3 %} <li>{{i}}</li> {% end %} </ul> <h1>字典</h1> {{k4}}<br> {{k4['name']}}<br> {{k4.get('name')}} <ul> {% for k,v in k4.items() %} <li>{{k}}:{{v}}</li> {% end %} <form method="post" action="login"> <input type="text" name="user"/> <input type="submit" value="提交"/> </ul> </body> </html>