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()

 

 

 

 

posted @ 2018-04-08 16:05  九二零  阅读(105)  评论(0编辑  收藏  举报