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()
![]()