zoukankan      html  css  js  c++  java
  • tornado之用户验证装饰器

    authenticated装饰器

      为了使用Tornado的认证功能,我们需要对登录用户标记具体的处理函数。我们可以使用@tornado.web.authenticated装饰器完成它。当我们使用这个装饰器包裹一个处理方法时,Tornado将确保这个方法的主体只有在合法的用户被发现时才会调用。

    class IndexHandler(tornado.web.RequestHandler):
      @tornado.web.authenticated
      def get(self):
        self.xsrf_token
        self.render("index.html")
    

     get_current_user()方法

      装饰器@tornado.web.authenticated的判断执行依赖于请求处理类中的self.current_user属性,如果current_user值为假(None、False、0、""等),任何GET或POST请求都将把访客重定向到应用设置中login_url指定的URL,而非法用户的POST请求将返回一个带有403(Forbidden)状态的HTTP响应。

      在获取self.current_user属性的时候,tornado会调用get_current_user()方法来返回current_user的值。也就是说,我们验证用户的逻辑应写在get_current_user()方法中,若该方法返回非假值则验证通过,否则验证失败。

    class IndexHandler(tornado.web.RequestHandler):
      # 由于使用了装饰器tornado.web.authenticated,需要重写get_current_user()
      # 用于校验用户登录信息,此处返回Flase进行登录拦截
      def get_current_user(self):
        # 此处用于完成验证用户信息
        f = True
        if f:
          return True
        else:
          return False
     
      # 默认调用get_current_user()方法
      @tornado.web.authenticated
      def get(self):
        self.xsrf_token
        self.render("index.html")
    

     login_url设置

       在login_url后面补充的next参数就是记录的跳转至登录页面前的所在位置,所以我们可以使用next参数来完成登陆后的跳转。

    if __name__ == '__main__':
      tornado.options.parse_command_line()
      settings = dict(
        cookie_secret="yyyyyyyyyyyy",
        login_url="/login",
        debug=True
      )
     
      app = tornado.web.Application([
        (r"/", IndexHandler),
        (r"/login", LoginHandler),
      ], **settings)
     
      http_server = tornado.httpserver.HTTPServer(app)
      http_server.listen(8000)
      tornado.ioloop.IOLoop.current().start()
    

     Next参数

       在login_url后面补充的next参数就是记录的跳转至登录页面前的所在位置,所以我们可以使用next参数来完成登陆后的跳转

    class LoginHandler(tornado.web.RequestHandler):
      def get(self):
        next_url = self.get_argument("next","/")
        if next_url:
          print(next_url)
          self.redirect(next_url + "?f=login")
        else:
          self.write("登陆页面")
    
  • 相关阅读:
    jQuery瀑布流实例无限滚动加载图片
    【转载】IEnumerable<T>和IQueryable<T>区分
    【转载】C#数组,List,Dictionary的相互转换
    【转载】IQueryable和IEnumerable
    【转载】ABP源码分析一:整体项目结构及目录
    【转载】.NET深入解析LINQ框架(四:IQueryable、IQueryProvider接口详解)
    C# DataTable 转换 Model实体类,DataTable 转换 List 集合
    【转载】N 种仅仅使用 HTML/CSS 实现各类进度条的方式
    【转载】IQueryable 和 IEnumerable 的区别
    【转载】SQL Server Profiler工具
  • 原文地址:https://www.cnblogs.com/zhichaoma/p/9493686.html
Copyright © 2011-2022 走看看