Flask學習記錄之Flask-Login


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 %}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM