欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Flask框架中Flask-Login模塊的使用

 更新時間:2023年01月13日 14:08:57   作者:夢想橡皮擦  
Flask-Login 是一個 Flask 模塊,可以為 Flask 應用程序提供用戶登錄功能。這篇文章將通過一些示例為大家介紹一下Flask-Login模塊的使用,需要的可以參考一下

flask-login 模塊簡介

Flask-Login 是一個 Flask 模塊,可以為 Flask 應用程序提供用戶登錄功能。要在 Flask 應用程序中使用 Flask-Login,需要先安裝它:

pip install flask-login

這了有個小細節(jié)需要注意,模塊安裝都使用中劃線(-),模塊使用時用下劃線 _

在應用程序中導入并初始化 Flask-Login:

from flask import Flask
from flask_login import LoginManager

app = Flask(__name__)
login_manager = LoginManager(app)

上述代碼中提及了 LoginManager 類,該類是 Flask-Login 提供的主要入口點,用于管理用戶登錄狀態(tài)。在你的 Flask 應用程序中初始化它。

然后我們可以使用 init_app() 函數(shù)來初始化 LoginManager 實例并綁定到指定的 Flask 應用上。這樣就可以在應用程序中使用該實例來管理用戶登錄狀態(tài)。

一些常用的配置項:

  • login_view: 登錄頁面的名稱或路由,默認為 'login';
  • session_protection : 一個字符串,定義 session 保護級別,可用的值為 'basic' , 'strong' , 'None';
  • user_callback: 當未登錄時被調(diào)用的回調(diào)函數(shù);
  • unauthorized_callback: 當未登錄且 session_protection != None 時被調(diào)用的回調(diào)函數(shù);
  • login_message:用戶未登錄時顯示的消息;
  • login_message_category:消息類別,默認是 ‘message’;

在上面的示例中,我們沒有指定登錄頁面,系統(tǒng)會默認使用 “login” 作為登錄頁面,如果需要指定其他頁面,可以在初始化后設置 login_view 屬性。

login_manager.login_view = 'your_login_route'

展示一下完整示例代碼。

from flask import Flask, render_template, redirect, url_for, request
from flask_login import LoginManager, login_user, logout_user, login_required

app = Flask(__name__)
login_manager = LoginManager(app)


@login_manager.user_loader
def load_user(user_id):
    # 加載用戶
    user = list()
    return user


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 登錄校驗代碼
        username = request.form['username']
        password = request.form['password']
        user = load_user(username)
        # 注意 user.verify_password 是自定義函數(shù),用來校驗密碼是否正確
        if user and user.verify_password(password):
            login_user(user)
            return redirect(url_for('home'))
    return render_template('login.html')


@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('home'))

Flask-Login 模塊的上手細節(jié)

user_loader 函數(shù)

user_loader() 函數(shù)是 Flask-Login 提供的一個裝飾器,用來設置一個回調(diào)函數(shù),用來加載用戶。這個函數(shù)需要接收一個用戶 ID 作為參數(shù),并返回一個用戶對象。

@login_manager.user_loader
def load_user(user_id):
    # 從數(shù)據(jù)庫或者其他存儲位置 讀取用戶信息
    user = list()
    return user

使用了該裝飾器之后,每當 Flask-Login 需要加載用戶時,都會調(diào)用這個回調(diào)函數(shù),并傳入用戶 ID 作為參數(shù)。該函數(shù)應該根據(jù)用戶 ID 從數(shù)據(jù)庫或其他存儲中加載用戶,并返回用戶對象。如果沒有找到用戶,則應該返回 None。

需要注意的是,該函數(shù)默認接收一個參數(shù),就是用戶的 ID。如果要接收其他參數(shù),可以通過閉包(closure)或者全局變量來傳遞參數(shù),例如下面這種方式:

some_variable = 'xiangpica'

@login_manager.user_loader
def load_user(user_id):
    return User.query.filter_by(id=user_id,name=some_variable).first()

另外還可以再次封裝函數(shù)然后傳入?yún)?shù),例如:

def user_loader_fn(some_variable):
    @login_manager.user_loader
    def load_user(user_id):
        return User.query.filter_by(id=user_id,some_variable=some_variable).first()
    return load_user

some_variable = 'xiangpica'
load_user = user_loader_fn(some_variable)

login_user 函數(shù)

該函數(shù)是 Flask-Login 提供的一個函數(shù),用來登錄用戶。這個函數(shù)需要接受一個用戶對象作為參數(shù)。

在上面的示例代碼中,當驗證用戶密碼成功后,會調(diào)用 login_user(user) 函數(shù)登錄用戶。這個函數(shù)會將用戶對象存儲到會話中,并標記用戶已經(jīng)登錄。在后續(xù)的請求中,可以使用 current_user 變量來訪問當前登錄的用戶。

login_user() 函數(shù)原型如下:

login_user(user, remember=False, duration=None, force=False, fresh=True)

其參數(shù)說明如下:

  • remember:布爾值,表示是否記住用戶,默認 False;
  • duration:datetime.timedelta 對象,用戶登錄的時間,默認為 None;
  • force:布爾值,表示是否強制登錄用戶,即使用戶已經(jīng)登錄,默認為 False;
  • fresh:布爾值,表示用戶登錄后是否需要獲取新的權限, 默認為 True。

這個函數(shù)在登錄用戶之后會在 session 中記錄用戶的狀態(tài),使得之后的請求都能識別出這個用戶已經(jīng)登錄。

login_user() 函數(shù)還會在用戶登錄后設置一個 cookie, 以便在后續(xù)請求中識別用戶身份。這個 cookie 的名稱是 remember_token, 如果你指定了 remember=True,則會將該 cookie 的過期時間設置為 REMEMBER_COOKIE_DURATION, 否則將在會話結(jié)束后過期。

logout_user 函數(shù)

該函數(shù)是 Flask-Login 提供的一個函數(shù),用來注銷當前登錄的用戶。這個函數(shù)無需接受任何參數(shù),因為它會清除當前會話中存儲的用戶信息。

使用方法很簡單,只需要在需要注銷的地方直接調(diào)用 logout_user() 函數(shù)即可。

from flask_login import logout_user
@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('index'))

調(diào)用 logout_user() 函數(shù)會刪除會話中存儲的用戶信息,并且會刪除 remember_token 的 cookie, 從而使用戶登出。

在注銷用戶后,應用程序應重定向用戶到登錄頁面或主頁面。用戶注銷后,可以使用 current_user 變量來確定用戶是否已經(jīng)注銷。如果用戶已經(jīng)注銷,則 current_user 是一個匿名用戶。

confirm_login 函數(shù)

該函數(shù)是 Flask-Login 提供的一個函數(shù),用于確認用戶登錄狀態(tài)。在某些場景中,用戶可能被提示登錄后才能執(zhí)行某些操作。在這種場景中,可以使用 confirm_login() 函數(shù)來確認用戶是否已經(jīng)登錄。

該函數(shù)需要接收一個參數(shù),是當前登錄用戶的 ID。當用戶登錄后,會在會話中存儲用戶 ID。如果用戶已經(jīng)登錄,則會話中會有 user_id 的值,該函數(shù)會根據(jù)這個值來確認用戶是否已經(jīng)登錄。

from flask_login import confirm_login
@app.route('/school')
def settings():
    if not confirm_login():
        return redirect(url_for('login'))
    return render_template('school.html')

這樣就可以在訪問 “/settings” 路徑時確認用戶是否已經(jīng)登錄,如果沒有登錄則重定向到登錄頁面。

這里需要注意:如果在用戶登錄之后沒有將用戶 ID 記錄到會話中,那么 Flask-Login 的 confirm_login() 函數(shù)就無法確認用戶是否已經(jīng)登錄。

unauthorized_callback 函數(shù)

該函數(shù)用于在用戶訪問被保護的視圖函數(shù)時被拒絕授權時被調(diào)用。回調(diào)函數(shù)默認是 None,如果你設置了該回調(diào)函數(shù), 則在用戶未登錄或者沒有權限訪問時,會調(diào)用這個函數(shù)。

默認的 Flask-Login 實現(xiàn)會拋出一個 unauthorized 的異常,你可以在回調(diào)函數(shù)里面定制自己的錯誤處理. 例如:

from flask_login import LoginManager
login_manager = LoginManager()

@login_manager.unauthorized_handler
def unauthorized():
    return '登錄后訪問該頁面'

上面的代碼在訪問被保護視圖時會自動調(diào)用 unauthorized() 函數(shù),返回 '登錄后訪問該頁面' 錯誤信息。

needs_refresh_callback 函數(shù)

該函數(shù)在用戶的認證信息需要刷新時會被調(diào)用,默認返回值是 None。

當用戶登錄后, 一般會在會話中存儲一些用戶信息, 比如用戶名, 角色等等。當用戶認證信息有變化時, 例如用戶角色被更新了,就需要重新加載用戶信息。

如果你設置了 needs_refresh_callback 函數(shù),當用戶的認證信息需要刷新時, 會調(diào)用這個函數(shù)來重新加載用戶信息。

from flask_login import LoginManager, current_user
login_manager = LoginManager()

@login_manager.needs_refresh_handler
def refresh_user():
    current_user.load_data()

login_required 裝飾器

該裝飾器用來保護視圖函數(shù),確保只有登錄用戶才能訪問。如果一個用戶沒有登錄,將會重定向到登錄頁面。

使用方法很簡單,只需要在需要保護的視圖函數(shù)的前面加上 @login_required 即可。例如:

from flask_login import login_required

@app.route('/school')
@login_required
def settings():
    return render_template('school.html')

默認情況下, 重定向地址是 login, 如果你有其他路徑名稱,可以使用 login_url 參數(shù)來設置重定向地址。例如:

@app.route('/school')
@login_required(login_url='/signin')
def settings():
    return render_template('school.html')

還可以使用 next 參數(shù)來設置登錄成功后的重定向地址。例如:

@app.route('/login', methods=['GET', 'POST'])
def login():
    next = request.args.get('next')
    if request.method == 'POST':
        # check login
        login_user(user)
        return redirect(next or url_for('index'))
    return render_template('login.html', next=next)

到此這篇關于詳解Flask框架中Flask-Login模塊的使用的文章就介紹到這了,更多相關Flask框架Flask-Login內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • PyCharm刷新項目(文件)目錄的實現(xiàn)

    PyCharm刷新項目(文件)目錄的實現(xiàn)

    今天小編就為大家分享一篇PyCharm刷新項目(文件)目錄的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Python?VisPy庫高性能科學可視化圖形處理用法實例探究

    Python?VisPy庫高性能科學可視化圖形處理用法實例探究

    VisPy是一個用于高性能科學可視化的Python庫,它建立在現(xiàn)代圖形處理單元(GPU)上,旨在提供流暢、交互式的數(shù)據(jù)可視化體驗,本文將深入探討VisPy的基本概念、核心特性以及實際應用場景,并通過豐富的示例代碼演示其強大的可視化能力
    2023-12-12
  • Python求均值,方差,標準差的實例

    Python求均值,方差,標準差的實例

    今天小編就為大家分享一篇Python求均值,方差,標準差的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 基于python的字節(jié)編譯詳解

    基于python的字節(jié)編譯詳解

    下面小編就為大家?guī)硪黄趐ython的字節(jié)編譯詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • python的文件操作方法匯總

    python的文件操作方法匯總

    文件操作對編程語言的重要性不用多說,如果數(shù)據(jù)不能持久保存,信息技術也就失去了意義。按照本人經(jīng)驗,IO也是蠻頭疼的一件事,因為不會用得太多,所以總是記不住API,每次都要重新google就會打斷思路,還不一定每次都快速得到正確的文章。
    2017-11-11
  • python中字典(Dictionary)用法實例詳解

    python中字典(Dictionary)用法實例詳解

    這篇文章主要介紹了python中字典(Dictionary)用法,以實例形式較為詳細的分析了Python字典建立、添加、刪除等常見操作技巧,需要的朋友可以參考下
    2015-05-05
  • Django中使用Redis配置緩存的方法步驟

    Django中使用Redis配置緩存的方法步驟

    本文主要介紹了Django中使用Redis配置緩存的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-05-05
  • python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    在pymysql中支持對占位符的處理,開發(fā)者需要在SQL中使用“%”定義占位符,在使用excute()方法執(zhí)行時對占位符的數(shù)據(jù)進行填充即可,本文給大家介紹python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)的方法,需要的朋友參考下吧
    2021-12-12
  • PyTorch中常見損失函數(shù)的使用詳解

    PyTorch中常見損失函數(shù)的使用詳解

    損失函數(shù),又叫目標函數(shù),是指計算機標簽值和預測值直接差異的函數(shù),本文為大家整理了PyTorch中常見損失函數(shù)的簡單解釋和使用,希望對大家有所幫助
    2023-06-06
  • 詳解Python使用Plotly繪圖工具,繪制甘特圖

    詳解Python使用Plotly繪圖工具,繪制甘特圖

    這篇文章主要介紹了Python使用Plotly繪圖工具,繪制甘特圖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04

最新評論