tornado
import tornado.ioloop import tornado.web import tornado.websocket # 视图 class LoginHandler(tornado.web.RequestHandler): def get(self, *args, **kwargs): self.render('login.html',msg='') def post(self, *args, **kwargs): user = self.get_argument('user') pwd = self.get_argument('pwd') if user == 'oldboy' and pwd == '123': self.set_cookie('uuuuu',user) self.redirect('/index') return # 模版渲染 self.render('login.html',msg='用户名或密码错误') # 执行视图前会先执行initialize方法,再执行prepare方法,如果prepare方法中执行了self.finish方法,就不会执行视图了 class AuthHandler(object): """ def get_current_user(self): user = self.get_cookie('uuuuu') return user def prepare(self): if not self.current_user: self.redirect(self.get_login_url()) """ def prepare(self): user = self.get_cookie('uuuuu') if not user: self.redirect('/login') # 先继承了authhandler,则会先执行它的prepare方法 class IndexHandler(AuthHandler, tornado.web.RequestHandler): def get(self): data = [ {'name':'alex','age':18}, {'name':'oldboy','age':48}, ] self.render('index.html',data=data) """ class AuthRequestHandler(tornado.web.RequestHandler): def prepare(self): user = self.get_cookie('uuuuu') if not user: self.redirect('/login') class IndexHandler(AuthRequestHandler): def get(self): self.write("Hello, world") """ class ChatHandler(AuthHandler, tornado.web.RequestHandler): def get(self): self.render('chat.html') class MsgHandler(tornado.websocket.WebSocketHandler): def open(self): """ 客户端连接成功时,自动执行 :return: """ pass # self.write_message(content) def on_message(self, message): """ 客户端发送消息时,自动执行 :param message: :return: """ print(message) self.write_message(message) def on_close(self): """ 客户端关闭连接时,,自动执行 :return: """ pass # 配置文件以字典的方式存在,传参用**传 settings = { # 配置模版文件保存路径 'template_path': 'templates', 'login_url':'/login', # 静态文件保存路径 'static_path': 'static', # 静态文件请求路径 'static_url_prefix': '/static/', } # 配置路由,加载配置文件 application = tornado.web.Application([ (r"/index", IndexHandler), (r"/login", LoginHandler), (r"/chat", ChatHandler), (r"/msg", MsgHandler), ],**settings) if __name__ == "__main__": # 监听IP和端口 application.listen(8888, address="127.0.0.1") # 启动 tornado.ioloop.IOLoop.instance().start()