亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

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

Login_Manager

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

初始化一個(gè)LoginManager類(lèi)對(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源代碼參考下圖:

源代碼注釋?zhuān)?/p>

這將設(shè)置從會(huì)話(huà)重新加載用戶(hù)的回調(diào)。 您設(shè)置的函數(shù)應(yīng)該使用用戶(hù)ID(“unicode”)并返回用戶(hù)對(duì)象,如果用戶(hù)不存在則返回“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后,再通過(guò)@login_manager.user_loader裝飾的函數(shù)獲取到user對(duì)象,如果沒(méi)有獲取到有效的user對(duì)象,就認(rèn)為是anonymous user
3、最后將user保存于request context中(無(wú)論是正常的用戶(hù)還是anonymous用戶(hù))

源代碼注釋

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

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

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

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

login_manager.login_message ='Please login first!'

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

login_manager.refresh_view = "/"

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

login_manager.needs_refresh_message = 'Refresh for login!'

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

login_manager.session_protection = ‘strong’

utils

Login_required

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

源碼解釋?zhuān)?/p>

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

Login_user

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

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

logout_user

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

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

UserMixin

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

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

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

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

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

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

1.定義 User

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

is_authenticated 屬性

is_active 屬性

is_anonymous 屬性

get_id() 方法

最簡(jiǎn)單的方法是從 UserMixin 類(lèi)繼承,該類(lèi)提供了默認(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 記錄的是用戶(hù) ID (user_id),回調(diào)函數(shù)的作用就是通過(guò) user_id 返回對(duì)應(yīng)的 User 對(duì)象。user_loader 回調(diào)函數(shù)在 user_id 非法的時(shí)候不應(yīng)該拋出異常,而要返回 None。沒(méi)有這個(gè)回調(diào)函數(shù)的話(huà),F(xiàn)lask-Login 將無(wú)法工作

@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

        # 通過(guò)Flask-Login的login_user方法登錄用戶(hù)
        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ū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(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)想法、開(kāi)發(fā)工具選擇、經(jīng)驗(yàn)分享、代碼示例等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Python使用異步線(xiàn)程池如何實(shí)現(xiàn)異步TCP服務(wù)器交互

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

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

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

    這篇文章主要介紹了Python屬性和內(nèi)建屬性實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(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í)例代碼

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

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

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

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

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

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

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

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

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

最新評(píng)論