zoukankan      html  css  js  c++  java
  • Flask学习记录之FlaskLogin

    Flask-Loging 可以方便的管理用户会话,保护路由只让认证用户访问

    http://flask-login.readthedocs.org/en/latest/ 

    一.初始化Flask-Login

    from flask.ext.login import loginManager
    
    loginManager = LoginManager(app)
    #如果需要延迟创建app 可使用 
    # loginManager = LoginManager()
    # loginManager.init_app(app)
    
    loginManager.session_protection = "strong"
    #可以设置None,'basic','strong'  以提供不同的安全等级,一般设置strong,如果发现异常会登出用户
     
    loginManager.login_view = "login"
    #这里填写你的登陆界面的路由

    二.配置及使用Flask-Login

    (1)使用flask-login有如下两种方法

    1.  在用户模型中实现 is_authenticated()方法 返回用户是否登陆
      is_active()方法  返回是否允许该用户登陆,返回false该用户将不能登陆
      is_anonymous()方法 返回是否是匿名用户, 也就是未登陆的用户等
      get_id() 返回可以唯一标识用户的Unicode字符串 
    2. 直接让用户模型继承 flask.ext.login.UserMixin类,类中有上面4个方法的默认实现 如:
      from flask.ext.login import UserMixin
      
      class User(db.Model, UserMixin):
          id = db.Column(db.Integer, primary_key=True)
          username = db.Column(db.String(64),unique=True)
      Flask-Login还提供了 flask.ext.login.AnonymousUserMixin类 继承至该类的用户模型 将作为未登陆时的用户模型,可以保持代码的一致性

    (2)Flask-Login要求实现一个回调函数,使用 get_id()方法返回的唯一标识用户的Unicode字符串 作为参数 返回这个用户对象.

    如果是继承的UserMixin类, get_id()方法默认返回的用户的id. 如果用户不存在,应该返回None.

    from . import loginManager
    
    @loginManager.user_loader
    def load_user(user_id):
        return User.query.get(int(user_id))

    (3)如果需要让页面只可又认证用户访问,可使用login_required装饰路由函数,未登陆的请求将会跳转到上面loginManager.login_view设置的登陆页面路由 如:

    from flask.ext.login import login_required
    
    @app.route('/index')
    @login_required
    def index():
        return "只有登陆用户能看到我"

    (4)登陆登出用户 使用如下代码:

    from flask.ext.login import login_user, logout_user
    
    #获取要登陆的用户对象
    user = User.query.filter_by(username = 'skkg').first()
    
    #第一个参数传入用户对象,第二个参数 传入 以后是否自动登陆
    login_user(user,True)
    
    #登出
    logout_user

    (5)获取当前登陆的用户,

    from flask.ext.login import current_user
    
    #判断当前用户是否是匿名用户
    current_user.is_anonymous()

      也可以在模版中使用 {% if current_user.is_authenticated() %} 判断

     (6)在模版中使用,如果用户已认证就显示他的名字

    {% if current_user.is_authenticated() %}
      Hi {{ current_user.name }}!
    {% endif %}
    

      

  • 相关阅读:
    WPF自定义RoutedEvent事件代码段
    微信聊天和通讯录按钮样式
    【转】c#、wpf 字符串,color,brush之间的转换
    模块式开发
    通过属性进行浅拷贝
    【转】string.Format对C#字符串格式化
    酷学习笔记——前言
    C# 连蒙带骗不知所以然的搞定USB下位机读写
    C# Ioc、DI、Unity、TDD的一点想法和实践
    虹软人脸识别速度测试征集
  • 原文地址:https://www.cnblogs.com/agmcs/p/4445428.html
Copyright © 2011-2022 走看看