zoukankan      html  css  js  c++  java
  • authencated认证登录

    #coding:utf-8
    import tornado.httpserver
    import tornado.ioloop
    import tornado.options
    import tornado.web
    import time
    
    from  tornado.options import define,options
    from data.sqlalchemy08 import User,session
    from tornado.web import authenticated
    define('port',default=8000,help='run port',type=int)
    define('version',default='0.0.1',help='version 0.0.1',type=str)
    def auth(fun):
        def wrapper(self,*agrs,**kwargs):
            id=self.get_secure_cookie('ID')
            if id:
                return fun(self,*args,**kwargs)
            else:
                self.redirect('/login')
        return  auth
    class BaseHandeler(tornado.web.RequestHandler):
        def get_current_user(self):
            current_user=self.get_secure_cookie('ID')
            if current_user:
                return current_user
            else:
                return None
    class IndexHandler(BaseHandeler):
    #用auth装饰,可省去大量重复代码,在需要登录的地方调用就可以
       # @auth
    #从写认证方法中的current_user
    # def get_current_user(self):
    #     current_user = self.get_secure_cookie('ID')
    #     if current_user:
    #         return current_user
    #     else:
    #         return None
        #用tornado自带的认证,需在底部app设置加上登录界面login_url,否则报错,为了再次复用,写个父类
        @authenticated
       # @tornado.web.authenticated
        def get(self):
            # id=self.get_secure_cookie('ID')
            # if id:
            #     self.write('登录成功')
            # else:
            #     self.redirect('/login')
            self.write('登录成功')
    
    
    class LoginHandler(BaseHandeler):
        def get(self):
            #self.render('08login.html', error=None)
            nextname=self.get_argument('next','')
            self.render('11authencated.html',nextname=nextname)
    
        def post(self):
            nextname = self.get_argument('next', '')
            username = User.by_name(self.get_argument('name', ''))
            passwd = self.get_argument('passwd', '')
            if username and username[0].passwd == passwd:
                self.set_secure_cookie('ID',username[0].username,max_age=100)
                self.write('登录成功-----')
                time.sleep(3)
                self.redirect(nextname)
            else:
                self.redirect('/login')
    
    if __name__ == "__main__":
        tornado.options.parse_command_line()
        # print(options.port)
        app=tornado.web.Application(
            handlers=[
                (r'/index',IndexHandler),
                (r'/login',LoginHandler),
            ],
            template_path='templates',
            static_path='static',
            login_url='/login',
            debug=True,
            cookie_secret='aaa5555sssss'
            #autoescape=None,   #关闭自动转义 全局的
        )
     #固定写法:
        http_server=tornado.httpserver.HTTPServer(app)
        http_server.listen(options.port)
        tornado.ioloop.IOLoop.instance().start()
    auth.py
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
    </head>
    <body>
    
    
    <form method="post" action="/login?next={{ nextname }}" >
        用户名</br>
        <input type="text" name="name" /><br>
        <input type="text" name="passwd" /><br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
  • 相关阅读:
    linux 网络相关
    工作随笔
    python
    trouble-shooting
    MySQL常见问题总结
    根据 Request 获取客户端 IP
    文件上传按钮优化
    Linux中RabbitMQ安装
    linux 完全卸载MySQL
    Linux 下安装 MySQL-5.7.24
  • 原文地址:https://www.cnblogs.com/lajiao/p/7801465.html
Copyright © 2011-2022 走看看