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

Python?Flask-Login模塊使用案例詳解

 更新時(shí)間:2023年01月29日 11:06:09   作者:gymaisyl  
Flask-Login?通過?user?session,提供登錄的常見任務(wù),比如登入?(logging?in)、登出?(logging?out)?和當(dāng)前用戶?(current?user),這篇文章主要介紹了Python?Flask-Login模塊使用詳解,需要的朋友可以參考下

先看一下flask-login模塊的整體架構(gòu)

基礎(chǔ)的信息和全局配置這里就不多說,需要用到再斟酌也可以的。
這里也是針對(duì)每個(gè)模塊較為常用的進(jìn)行解釋說明,后期再使用過程中遇到會(huì)進(jìn)行補(bǔ)充。

Login_Manager

LoginManager是一個(gè)類,有多個(gè)方法和屬性;此類初始化的對(duì)象用于保存用于登錄的設(shè)置。實(shí)例:class:LoginManager * *不綁定到特定應(yīng)用程序,因此可以在代碼的主體中創(chuàng)建一個(gè),然后將其綁定到您的應(yīng)用程序app中 工廠函數(shù)。

初始化一個(gè)LoginManager類對(duì)象

@login_manager.user_loader
def load_user(userid):
    return User.get(userid)

init__app() – 配置該對(duì)象

login_manager.init_app(app)

user_loader() 回調(diào)函數(shù)

自定義回調(diào)函數(shù),user_loader源代碼參考下圖:

源代碼注釋:

這將設(shè)置從會(huì)話重新加載用戶的回調(diào)。 您設(shè)置的函數(shù)應(yīng)該使用用戶ID(“unicode”)并返回用戶對(duì)象,如果用戶不存在則返回“None”。

自定義回調(diào)函數(shù)

@login_manager.user_loader
def load_user(userid):
    return User.get(userid)

在執(zhí)行該段代碼之后,注冊(cè)了load_user()這個(gè)自定義的callback。

reload_user()

1、首先獲取user id,如果獲取不到有效的id,就將user設(shè)為anonymous user
2、獲取到id后,再通過@login_manager.user_loader裝飾的函數(shù)獲取到user對(duì)象,如果沒有獲取到有效的user對(duì)象,就認(rèn)為是anonymous user
3、最后將user保存于request context中(無論是正常的用戶還是anonymous用戶)

源代碼注釋

這將ctx.user設(shè)置為由您的自定義user_loader回調(diào)函數(shù)加載的用戶對(duì)象,該函數(shù)應(yīng)使用從session獲取的user_id檢索用戶對(duì)象。
語法示例:
來自于flask_login導(dǎo)入LoginManager
@ login_manager.user_loader
def any_valid_func_name(user_id):
#使用給定的user_id獲取用戶對(duì)象,
#如果您使用SQLAlchemy,例如:
user_obj = User.query.get(int(user_id))
return user_obj
讓你定義這個(gè)self.user_callback的原因:
因?yàn)槲覀儾恢滥銓⑷绾?在哪里加載用戶對(duì)象。

(實(shí)例屬性的配置) login-view :驗(yàn)證失敗跳轉(zhuǎn)的界面

login_manager.login_view = "/" 跳轉(zhuǎn)到/首頁目錄

login-message:用戶重定向到登錄頁面時(shí)閃出的消息

login_manager.login_message ='Please login first!'

refresh-view:用戶需要重新進(jìn)行身份驗(yàn)證時(shí)要重定向到的視圖的名稱。

login_manager.refresh_view = "/"

needs-refresh-message:用戶重定向到“需要刷新”頁面時(shí)閃出的消息。

login_manager.needs_refresh_message = 'Refresh for login!'

session-protection:使用會(huì)話保護(hù)的模式。這可以是'basic'(默認(rèn))或'strong',或None禁用

login_manager.session_protection = ‘strong’

utils

Login_required

current_user.is_authenticated,判斷當(dāng)前用戶是否認(rèn)證,如果沒有認(rèn)證的話就執(zhí)行unauthorized(),
unauthorized()會(huì)重定向到login_view參數(shù)設(shè)置的路由函數(shù)中去,所以在實(shí)例化LoginManager后要設(shè)置login_view屬性,
當(dāng)用戶沒有登陸時(shí),會(huì)自動(dòng)重定向到登陸界面,沒有設(shè)置會(huì)返回401錯(cuò)誤, 用戶登陸后,這個(gè)裝飾器就直接返回func(*args, **kwargs),相當(dāng)于沒有包裝一樣,裝飾器起到包裝接口的作用。

源碼解釋:

1、如果使用此裝飾視圖,它將確保在調(diào)用實(shí)際視圖之前登錄并驗(yàn)證當(dāng)前用戶。如果驗(yàn)證不通過,那么則會(huì)調(diào)用LoginManager.unauthorized()
2、#如果request method為例外method,即在EXEMPT_METHODS中的method,可以不必鑒權(quán)
3、如果_login_disabled為True則不必鑒權(quán)

Login_user

用戶登錄操作,用戶在通過自定義的login視圖函數(shù),通過驗(yàn)證并登錄成功后,需要

 # Flask-Login中的login_user可以記錄/保存當(dāng)前成功登陸的用戶
    login_user(user)

logout_user

登出功能類似,除了基本的操作外,還需要把flask-login中的登出進(jìn)行操作

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'Logged out successfully!'

UserMixin

is_authenticated
當(dāng)用戶通過驗(yàn)證時(shí),也即提供有效證明時(shí)返回 True 。(只有通過驗(yàn)證的用戶會(huì)滿足 login_required 的條件。)
is_active
如果這是一個(gè)活動(dòng)用戶且通過驗(yàn)證,賬戶也已激活,未被停用,也不符合任何你 的應(yīng)用拒絕一個(gè)賬號(hào)的條件,返回 True 。不活動(dòng)的賬號(hào)可能不會(huì)登入(當(dāng)然, 是在沒被強(qiáng)制的情況下)。
is_anonymous
如果是一個(gè)匿名用戶,返回 True 。(真實(shí)用戶應(yīng)返回 False 。)
get_id()
返回一個(gè)能唯一識(shí)別用戶的,并能用于從 user_loader 回調(diào)中加載用戶的 unicode 。注意著 必須 是一個(gè) unicode —— 如果 ID 原本是 一個(gè) int 或其它類型,你需要把它轉(zhuǎn)換為 unicode 。
要簡(jiǎn)便地實(shí)現(xiàn)用戶類,你可以從 UserMixin 繼承,它提供了對(duì)所有這些方法的默認(rèn) 實(shí)現(xiàn)。(雖然這不是必須的。)

Flask-Login 一般使用基礎(chǔ)流程

Flask-Login 通過 user session,提供登錄的常見任務(wù),比如登入 (logging in)、登出 (logging out) 和當(dāng)前用戶 (current user)

login_user():實(shí)現(xiàn)用戶的登入,一般在登入的視圖函數(shù)中調(diào)用

logout_user():實(shí)現(xiàn)登出功能

current_user 屬性:獲取當(dāng)前用戶
如果需要頁面是授權(quán)用戶才可見,在相應(yīng)視圖函數(shù)前加上 @login_required 裝飾器進(jìn)行聲明即可,@login_required 裝飾器對(duì)于未登錄用戶訪問,默認(rèn)處理是重定向到 LoginManager.login_view 所指定的視圖

1.定義 User

登錄基于用戶,需要定義 User 類,F(xiàn)lask-Login 規(guī)定 User 類必須實(shí)現(xiàn)三個(gè)屬性和一個(gè)方法:

is_authenticated 屬性

is_active 屬性

is_anonymous 屬性

get_id() 方法

最簡(jiǎn)單的方法是從 UserMixin 類繼承,該類提供了默認(rèn)的實(shí)現(xiàn)。

from flask_login import UserMixin

class User(UserMixin,db.Model):
    pass

2.應(yīng)用程序的配置

創(chuàng)建 LoginManager 實(shí)例,然后與 app 綁定。、

from flask_login import LoginManager

login_manager = LoginManager()

login_manager.login_view = 'login'
login_manager.login_message_category = 'info'
login_manager.login_message = 'Access denied.'

login_manager.init_app(app)

3.user_loader 回調(diào)函數(shù)

user session 記錄的是用戶 ID (user_id),回調(diào)函數(shù)的作用就是通過 user_id 返回對(duì)應(yīng)的 User 對(duì)象。user_loader 回調(diào)函數(shù)在 user_id 非法的時(shí)候不應(yīng)該拋出異常,而要返回 None。沒有這個(gè)回調(diào)函數(shù)的話,F(xiàn)lask-Login 將無法工作

@login_manager.user_loader
def load_user(user_id):
    if query_user(user_id) is not None:
        curr_user = User()
        curr_user.id = user_id

        return curr_user

4.登入功能實(shí)現(xiàn)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user_id = request.form.get('userid')
        user = query_user(user_id)
        if user is not None and request.form['password'] == user['password']:

        curr_user = User()
        curr_user.id = user_id

        # 通過Flask-Login的login_user方法登錄用戶
        login_user(curr_user)

        return redirect(url_for('index'))

    flash('Wrong username or password!')

# GET 請(qǐng)求
return render_template('login.html')

關(guān)鍵就是 login_user(curr_user) 這句代碼,之前要構(gòu)建 User 對(duì)象,并指定 id。

5.登出功能實(shí)現(xiàn)

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return 'Logged out successfully!'

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

相關(guān)文章

  • Numpy中np.dot與np.matmul的區(qū)別詳解

    Numpy中np.dot與np.matmul的區(qū)別詳解

    本文主要介紹了Numpy中np.dot與np.matmul的區(qū)別詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python腳本實(shí)現(xiàn)集群檢測(cè)和管理功能

    Python腳本實(shí)現(xiàn)集群檢測(cè)和管理功能

    這篇文章主要介紹了Python腳本實(shí)現(xiàn)集群檢測(cè)和管理功能,本文講解了實(shí)現(xiàn)想法、開發(fā)工具選擇、經(jīng)驗(yàn)分享、代碼示例等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互

    Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互

    這篇文章主要介紹了Python使用異步線程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Python屬性和內(nèi)建屬性實(shí)例解析

    Python屬性和內(nèi)建屬性實(shí)例解析

    這篇文章主要介紹了Python屬性和內(nèi)建屬性實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 利用Python繪制多種風(fēng)玫瑰圖

    利用Python繪制多種風(fēng)玫瑰圖

    這篇文章主要介紹了利用Python繪制多種風(fēng)玫瑰圖,風(fēng)玫瑰是由氣象學(xué)家用于給出如何風(fēng)速和風(fēng)向在特定位置通常分布的簡(jiǎn)明視圖的圖形工具,下文繪制實(shí)現(xiàn)詳情,需要的小伙伴可以參考一下
    2022-05-05
  • Python將數(shù)據(jù)生成二維碼的四種方法實(shí)例代碼

    Python將數(shù)據(jù)生成二維碼的四種方法實(shí)例代碼

    二維碼在日常生活中非常常見,廣泛應(yīng)用于支付、登錄驗(yàn)證、信息分享等場(chǎng)景,下面這篇文章主要給大家介紹了關(guān)于Python將數(shù)據(jù)生成二維碼的四種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Python實(shí)現(xiàn)繪制自定義形狀的詞云示例

    Python實(shí)現(xiàn)繪制自定義形狀的詞云示例

    這篇文章主要介紹了Python實(shí)現(xiàn)繪制自定義形狀的詞云示例,通過將一段文本中出現(xiàn)頻率高的單詞按其出現(xiàn)頻率大小以及顏色深淺排列成一個(gè)詞云圖形,從而更好地展示文本中的信息,需要的朋友可以參考下
    2022-10-10
  • python實(shí)現(xiàn)拉普拉斯特征圖降維示例

    python實(shí)現(xiàn)拉普拉斯特征圖降維示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)拉普拉斯特征圖降維示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python基本數(shù)據(jù)類型及內(nèi)置方法

    Python基本數(shù)據(jù)類型及內(nèi)置方法

    這篇文章主要介紹了Python基本數(shù)據(jù)類型及內(nèi)置方法,??數(shù)據(jù)類型是用來記錄事物狀態(tài)的,而事物的狀態(tài)是不斷變化的,下文圍繞主題展開相關(guān)內(nèi)容需要的小伙伴可以參考一下
    2022-04-04
  • Python通過psd-tools解析PSD文件的實(shí)現(xiàn)

    Python通過psd-tools解析PSD文件的實(shí)現(xiàn)

    本文主要介紹了Python通過psd-tools解析PSD文件的實(shí)現(xiàn),主要包括如何獲取PSD文件的基本信息、遍歷圖層、提取圖層詳細(xì)信息、保存和創(chuàng)建PSD文件,感興趣的可以了解一下
    2023-12-12

最新評(píng)論