# 异步非阻塞的框架 import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("hello world") class LoginHandler(tornado.web.RequestHandler): def get(self): # 5.获取传入get,post数据 # get_data = self.get_argument(‘p‘) # print(get_data) # self.request 封装了用户发来的所有请求 # 如果封装的方法无法获取,都可以在self.request中获取; # print(type(self.request)) # <class ‘tornado.httputil.HTTPServerRequest‘> from tornado.httputil import HTTPServerRequest # 6.返回额外响应内容 # self.set_cookie(‘k1‘, ‘v1‘) # self.set_header(‘h1‘, ‘v1‘) # 7.重定向 # self.redirect(‘/index‘) # 4.渲染页面,传递上下文 self.render(‘login.html‘, obj1=‘value1‘, obj2=‘value2‘) self.render(‘login.html‘, **{ ‘obj1‘: ‘obj1‘, ‘obj2‘: [1,2,3,4,5], ‘obj3‘: {‘name‘:‘mic‘, ‘age‘:‘18‘} }) def post(self): # self.write(‘....‘) # 获取post提交数据 v = self.get_argument(‘user‘) print(v) self.redirect(‘http://www.baidu.com‘) # 8.配置静态文件 settings = { # 静态文件目录 ‘static_path‘: ‘static‘, # url请求时前缀,如果不加,默认是项目根目录下绝对路径; ‘static_url_prefix‘: ‘/test/‘, # 模板文件路径 ‘template_path‘: ‘templates‘, } # 1.生成路由规则 application = tornado.web.Application( [(r"/index", MainHandler),(r"/login", LoginHandler),], **settings, ) if __name__ == "__main__": # 2.建立socket对象 # 将socket对象添加到select或epoll中 application.listen(8888) # 3.将select或epoll开始死循环while True: tornado.ioloop.IOLoop.instance().start()
# login.html <body> <h1>登录</h1> <div>{{obj1}}</div> <!-- 根据索引下标获取--> <div>{{ obj2[0] }}</div> <!-- 遍历列表 --> <ul> {% for item in obj2 %} <li>{{ item }}</li> {% end %} </ul> <!-- 以键取值,支持python内置方法 --> {{ obj3 }}<br> {{ obj3[‘name‘] }}<br> {{ obj3.get(‘age‘) }} <ul> {% for k, v in obj3.items() %} <li>{{ k }}: {{ v }}</li> {% end %} </ul> </body> <body>--> <!--<h1>登录</h1>--> <!--<form action="/login" method="POST">--> <!--<input type="text" name="user"/>--> <!--<input type="submit" value="提交"/>--> <!--</form>--> <!--<div><img src="/test/images/bd_logo1.png" alt="引入静态文件"></div>--> <!--</body>