76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
"""
|
|
example03.py - RequestHandler解析
|
|
"""
|
|
import os
|
|
import re
|
|
|
|
import tornado.ioloop
|
|
import tornado.web
|
|
|
|
from tornado.options import define, options, parse_command_line
|
|
|
|
|
|
# 定义默认端口
|
|
define('port', default=8000, type=int)
|
|
|
|
users = {}
|
|
|
|
|
|
class User(object):
|
|
"""用户"""
|
|
|
|
def __init__(self, nickname, gender, birthday):
|
|
self.nickname = nickname
|
|
self.gender = gender
|
|
self.birthday = birthday
|
|
|
|
|
|
class MainHandler(tornado.web.RequestHandler):
|
|
"""自定义请求处理器"""
|
|
|
|
def get(self):
|
|
# 从Cookie中读取用户昵称
|
|
nickname = self.get_cookie('nickname')
|
|
if nickname in users:
|
|
self.render('userinfo.html', user=users[nickname])
|
|
else:
|
|
self.render('userform.html', hint='请填写个人信息')
|
|
|
|
|
|
class UserHandler(tornado.web.RequestHandler):
|
|
"""自定义请求处理器"""
|
|
|
|
def post(self):
|
|
# 从表单参数中读取用户昵称、性别和生日信息
|
|
nickname = self.get_body_argument('nickname').strip()
|
|
gender = self.get_body_argument('gender')
|
|
birthday = self.get_body_argument('birthday')
|
|
# 检查用户昵称是否有效
|
|
if not re.fullmatch(r'\w{6,20}', nickname):
|
|
self.render('userform.html', hint='请输入有效的昵称')
|
|
elif nickname in users:
|
|
self.render('userform.html', hint='昵称已经被使用过')
|
|
else:
|
|
users[nickname] = User(nickname, gender, birthday)
|
|
# 将用户昵称写入Cookie并设置有效期为7天
|
|
self.set_cookie('nickname', nickname, expires_days=7)
|
|
self.render('userinfo.html', user=users[nickname])
|
|
|
|
|
|
def main():
|
|
"""主函数"""
|
|
parse_command_line()
|
|
app = tornado.web.Application(
|
|
handlers=[
|
|
(r'/', MainHandler),
|
|
(r'/register', UserHandler),
|
|
],
|
|
template_path=os.path.join(os.path.dirname(__file__), 'templates'),
|
|
)
|
|
app.listen(options.port)
|
|
tornado.ioloop.IOLoop.current().start()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|