example02.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. """
  2. example02.py - 路由解析
  3. """
  4. import os
  5. import random
  6. import tornado.ioloop
  7. import tornado.web
  8. from tornado.options import define, options, parse_command_line
  9. # 定义默认端口
  10. define('port', default=8000, type=int)
  11. class SayingHandler(tornado.web.RequestHandler):
  12. """自定义请求处理器"""
  13. def get(self):
  14. sayings = [
  15. '世上没有绝望的处境,只有对处境绝望的人',
  16. '人生的道路在态度的岔口一分为二,从此通向成功或失败',
  17. '所谓措手不及,不是说没有时间准备,而是有时间的时候没有准备',
  18. '那些你认为不靠谱的人生里,充满你没有勇气做的事',
  19. '在自己喜欢的时间里,按照自己喜欢的方式,去做自己喜欢做的事,这便是自由',
  20. '有些人不属于自己,但是遇见了也弥足珍贵'
  21. ]
  22. # 渲染index.html模板页
  23. self.render('index.html', message=random.choice(sayings))
  24. class WeatherHandler(tornado.web.RequestHandler):
  25. """自定义请求处理器"""
  26. def get(self, city):
  27. # Tornado框架会自动处理百分号编码的问题
  28. weathers = {
  29. '北京': {'temperature': '-4~4', 'pollution': '195 中度污染'},
  30. '成都': {'temperature': '3~9', 'pollution': '53 良'},
  31. '深圳': {'temperature': '20~25', 'pollution': '25 优'},
  32. '广州': {'temperature': '18~23', 'pollution': '56 良'},
  33. '上海': {'temperature': '6~8', 'pollution': '65 良'}
  34. }
  35. if city in weathers:
  36. self.render('weather.html', city=city, weather=weathers[city])
  37. else:
  38. self.render('index.html', message=f'没有{city}的天气信息')
  39. class ErrorHandler(tornado.web.RequestHandler):
  40. """自定义请求处理器"""
  41. def get(self):
  42. # 重定向到指定的路径
  43. self.redirect('/saying')
  44. def main():
  45. """主函数"""
  46. parse_command_line()
  47. app = tornado.web.Application(
  48. # handlers是按列表中的顺序依次进行匹配的
  49. handlers=[
  50. (r'/saying/?', SayingHandler),
  51. (r'/weather/([^/]{2,})/?', WeatherHandler),
  52. (r'/.+', ErrorHandler),
  53. ],
  54. # 通过template_path参数设置模板页的路径
  55. template_path=os.path.join(os.path.dirname(__file__), 'templates')
  56. )
  57. app.listen(options.port)
  58. tornado.ioloop.IOLoop.current().start()
  59. if __name__ == '__main__':
  60. main()