example03.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. """
  2. example03.py - RequestHandler解析
  3. """
  4. import os
  5. import re
  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. users = {}
  12. class User(object):
  13. """用户"""
  14. def __init__(self, nickname, gender, birthday):
  15. self.nickname = nickname
  16. self.gender = gender
  17. self.birthday = birthday
  18. class MainHandler(tornado.web.RequestHandler):
  19. """自定义请求处理器"""
  20. def get(self):
  21. # 从Cookie中读取用户昵称
  22. nickname = self.get_cookie('nickname')
  23. if nickname in users:
  24. self.render('userinfo.html', user=users[nickname])
  25. else:
  26. self.render('userform.html', hint='请填写个人信息')
  27. class UserHandler(tornado.web.RequestHandler):
  28. """自定义请求处理器"""
  29. def post(self):
  30. # 从表单参数中读取用户昵称、性别和生日信息
  31. nickname = self.get_body_argument('nickname').strip()
  32. gender = self.get_body_argument('gender')
  33. birthday = self.get_body_argument('birthday')
  34. # 检查用户昵称是否有效
  35. if not re.fullmatch(r'\w{6,20}', nickname):
  36. self.render('userform.html', hint='请输入有效的昵称')
  37. elif nickname in users:
  38. self.render('userform.html', hint='昵称已经被使用过')
  39. else:
  40. users[nickname] = User(nickname, gender, birthday)
  41. # 将用户昵称写入Cookie并设置有效期为7天
  42. self.set_cookie('nickname', nickname, expires_days=7)
  43. self.render('userinfo.html', user=users[nickname])
  44. def main():
  45. """主函数"""
  46. parse_command_line()
  47. app = tornado.web.Application(
  48. handlers=[
  49. (r'/', MainHandler),
  50. (r'/register', UserHandler),
  51. ],
  52. template_path=os.path.join(os.path.dirname(__file__), 'templates'),
  53. )
  54. app.listen(options.port)
  55. tornado.ioloop.IOLoop.current().start()
  56. if __name__ == '__main__':
  57. main()