国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

flask web 學(xué)習(xí)之用戶認(rèn)證與會(huì)話管理

這篇具有很好參考價(jià)值的文章主要介紹了flask web 學(xué)習(xí)之用戶認(rèn)證與會(huì)話管理。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Flask-Login是一個(gè)用于處理用戶認(rèn)證和會(huì)話管理的Flask插件。它簡化了在Flask應(yīng)用程序中實(shí)現(xiàn)用戶登錄、登出以及保護(hù)視圖等功能的過程。

一、安裝及初始化

flask-login官方文檔

pip install flask-login

在flask中進(jìn)行配置:

from flask import Flask
from flask_login import LoginManager

app = Flask(__name__)
login_manager = LoginManager()

# 初始化LoginManager對象
login_manager.init_app(app)

完成初始化之后,就可以在應(yīng)用中使用login_manager對象來處理用戶認(rèn)證和會(huì)話管理等功能。例如設(shè)置用戶加載回調(diào)函數(shù)
保護(hù)視圖函數(shù)等。

二、設(shè)置用戶加載回調(diào)函數(shù)

此回調(diào)用于從會(huì)話中存儲(chǔ)的用戶ID重新加載用戶對象。它應(yīng)該獲取用戶的ID,并返回相應(yīng)的用戶對象。例如:

@login_manager.user_loader
def load_user(user_id):
    # 根據(jù)用戶 ID 查詢用戶對象
    user = User.query.get(int(user_id))
    return user

三、定義User類

定義 User 類:創(chuàng)建一個(gè) User 類,表示應(yīng)用程序中的用戶,該類需要實(shí)現(xiàn)以下幾個(gè)方法:

  • is_authenticated():返回 True 如果用戶已經(jīng)通過認(rèn)證,否則返回 False。
  • is_active():返回 True 如果用戶是活躍的,否則返回 False。如果用戶被禁用,可以返回 False。
  • is_anonymous():返回 True 如果當(dāng)前用戶是匿名用戶,否則返回 False。
  • get_id():返回一個(gè)唯一標(biāo)識(shí)符的字符串,用于標(biāo)識(shí)用戶。
class User:
    def __init__(self, user_id, username, password):
        self.id = user_id
        self.username = username
        self.password = password

    def is_authenticated(self):
        # 根據(jù)你的認(rèn)證邏輯判斷用戶是否已經(jīng)通過認(rèn)證
        return True  # 假設(shè)用戶都已經(jīng)通過認(rèn)證

    def is_active(self):
        # 根據(jù)你的邏輯判斷用戶是否是活躍的
        return True  # 假設(shè)所有用戶都是活躍的

    def is_anonymous(self):
        # 根據(jù)你的邏輯判斷當(dāng)前用戶是否是匿名用戶
        return False  # 假設(shè)所有用戶都不是匿名的

    def get_id(self):
        # 返回一個(gè)唯一標(biāo)識(shí)符的字符串,用于標(biāo)識(shí)用戶
        return str(self.id)

    @staticmethod
    def get(user_id):
        # 從數(shù)據(jù)庫或其他數(shù)據(jù)源中獲取用戶對象
        # 根據(jù)用戶 ID 查詢用戶,并返回 User 對象
        # 如果找不到用戶,可以返回 None
        return User(user_id, 'username', 'password')

四、實(shí)現(xiàn)登陸操作

login_user(user)會(huì)自動(dòng)調(diào)用 User 對象中的 is_authenticated()、is_active() 和 get_id() 方法來判斷用戶是否通過認(rèn)證、是否活躍以及獲取用戶的唯一標(biāo)識(shí)符。

@app.route('/login', methods=['GET', 'POST'])
def login():
    form = LoginForm()
    # 驗(yàn)證表單
    if form.validate_on_submit():
        login_user(user)
        flask.flash('Logged in successfully.')
        # 獲取名為"next"的查詢參數(shù)的值
        next = flask.request.args.get('next')
        # 檢查驗(yàn)證給定的URL是否與當(dāng)前請求的主機(jī)和協(xié)議匹配,防止跳轉(zhuǎn)到不受信任的主機(jī)或使用不安全的協(xié)議。
        if not url_has_allowed_host_and_scheme(next, request.host):
            return flask.abort(400)

        return flask.redirect(next or flask.url_for('index'))
    return flask.render_template('login.html', form=form)

登陸成功后就可以在模板中使用current_user來獲取當(dāng)前登陸用戶了。

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

需要進(jìn)行登陸驗(yàn)證的視圖函數(shù)可以使用@login_required修飾器來進(jìn)行裝飾。

也可以使用logout_user()方法來退出登陸。

@app.route("/settings")
@login_required
def settings():
    pass


@app.route("/logout")
@login_required
def logout():
    logout_user()
    return redirect(somewhere)

五、自定義登陸過程

默認(rèn)情況下,當(dāng)用戶試圖在未登錄的情況下訪問login_required視圖時(shí),F(xiàn)lask login會(huì)閃爍一條消息,并將其重定向到登錄視圖。(如果未設(shè)置登錄視圖,它將中止,并顯示401錯(cuò)誤。)
所以我們需要設(shè)置登錄頁面的視圖函數(shù),并指定登錄頁面的 URL。

# 自定義未登錄消息視圖
login_manager.login_view = 'login'
# 自定義未登錄消息內(nèi)容
login_manager.login_message = u"Bonvolu ensaluti por uzi tiun pa?on."
# 自定義未登錄消息類別
login_manager.login_message_category = "info"

@login_manager.unauthorized_handler 是 Flask-Login 提供的裝飾器,用于定義未經(jīng)授權(quán)用戶訪問受保護(hù)頁面時(shí)的處理方式。
通過此修飾器能夠幫助定制未經(jīng)授權(quán)訪問的處理方式,以便提供更好的用戶體驗(yàn)和安全性。

@login_manager.unauthorized_handler
def unauthorized_callback():
    return redirect('/login')

六、使用請求加載器自定義登錄

使用請求加載器自定義登錄過程。請求加載器允許你根據(jù)請求中的信息動(dòng)態(tài)加載用戶對象,以滿足特定的登錄需求。例如獲取請求頭中的認(rèn)證信息、查詢參數(shù)等。

@login_manager.request_loader
def load_user_from_request(request):
    # 從請求中獲取用戶標(biāo)識(shí),例如獲取請求頭中的認(rèn)證信息、查詢參數(shù)等
    user_id = request.headers.get('Authorization')
    # 根據(jù)用戶標(biāo)識(shí)加載用戶對象
    user = User.query.get(user_id)
    return user

七、匿名用戶功能

Flask-Login 提供了匿名用戶功能,允許你在未登錄的情況下訪問受保護(hù)的頁面。匿名用戶對象是一個(gè)特殊的 UserMixin 對象,它提供了一些默認(rèn)的屬性和方法,可以模擬已登錄用戶的行為。

  1. 設(shè)置login_manager.anonymous_user屬性
login_manager.anonymous_user = Anonymous
  1. 定義匿名對象Anonymous
# 定義匿名用戶對象
class Anonymous(AnonymousUserMixin):
    @property
    def is_authenticated(self):
        return False

八、記住我功能

"記住我"功能是一種常見的身份驗(yàn)證功能,它允許用戶在關(guān)閉瀏覽器后仍然保持登錄狀態(tài)。當(dāng)用戶勾選 “記住我” 選項(xiàng)時(shí),系統(tǒng)會(huì)生成一個(gè)長期有效的憑證(通常是一個(gè)加密的令牌),并在用戶下次訪問時(shí)使用該憑證自動(dòng)登錄用戶。
要實(shí)現(xiàn) “記住我” 功能,你可以借助 Flask-Login 提供的 remember_me 參數(shù)和相關(guān)方法。

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 驗(yàn)證用戶名和密碼,并獲取用戶 ID
        username = request.form['username']
        password = request.form['password']
        user_id = authenticate(username, password)  # 自定義的驗(yàn)證函數(shù)
        if user_id:
        	# remember 值為 True/False
            remember_me = request.form.get('remember_me')
            user = get_user(user_id)
            login_user(user, remember=remember_me)
            return '登錄成功'
        else:
            return '用戶名或密碼錯(cuò)誤'    
    return render_template('login.html')

當(dāng)用戶勾選了 “記住我” 選項(xiàng)后,系統(tǒng)會(huì)生成一個(gè)長期有效的憑證(通常是一個(gè)加密的令牌),并在用戶下次訪問時(shí)使用該憑證自動(dòng)登錄用戶,無需再次進(jìn)行登錄操作。文章來源地址http://www.zghlxwxcb.cn/news/detail-817910.html

到了這里,關(guān)于flask web 學(xué)習(xí)之用戶認(rèn)證與會(huì)話管理的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 快速實(shí)現(xiàn)用戶認(rèn)證:使用Python和Flask配合PyJWT生成與解密Token的教程及示例代碼

    這段代碼提供了一個(gè)使用 Python 和 Flask 結(jié)合 JWT (JSON Web Tokens) 進(jìn)行用戶認(rèn)證的簡單框架。它包括了生成 token、解碼 token、檢查用戶狀態(tài)和一個(gè)裝飾器函數(shù),用于保護(hù)需要認(rèn)證的路由。下面是對代碼的逐部分解釋: 1. generate_token(user_id) 函數(shù) 這個(gè)函數(shù)用于為指定的用戶 ID 生成一

    2024年02月22日
    瀏覽(40)
  • [VUE學(xué)習(xí)]權(quán)限管理系統(tǒng)前端vue實(shí)現(xiàn)8-右上角用戶頭像顯示實(shí)現(xiàn)

    [VUE學(xué)習(xí)]權(quán)限管理系統(tǒng)前端vue實(shí)現(xiàn)8-右上角用戶頭像顯示實(shí)現(xiàn)

    ? ???????? next(‘/logon’) 、 next(to) 或者 next({ …to, replace: true }) ? ????????在路由守衛(wèi)中, 只有next()是放行 ,其他的諸如:next(‘/logon’) 、 next(to) 或者 next({ …to, replace: true })都不是放行, 而是:中斷當(dāng)前導(dǎo)航,執(zhí)行新的導(dǎo)航 ? ? ? ? ? ? ? ? 他不是直接放行 二十

    2024年02月13日
    瀏覽(32)
  • Python web實(shí)戰(zhàn)之Django用戶認(rèn)證詳解

    Python web實(shí)戰(zhàn)之Django用戶認(rèn)證詳解

    Python Web 開發(fā)、Django、用戶認(rèn)證、實(shí)戰(zhàn)案例 ? 今天來探討一下 Django 的用戶認(rèn)證吧!在這篇文章中,我將為大家?guī)硪恍┯嘘P(guān) Django 用戶認(rèn)證的最佳實(shí)踐。 ? 在開發(fā) Web 應(yīng)用程序時(shí),用戶認(rèn)證是一個(gè)最常用的功能。它能夠確保用戶的安全性和隱私,并且為應(yīng)用程序提供了個(gè)性化

    2024年02月14日
    瀏覽(95)
  • (二)Flask快速上手之用戶管理系統(tǒng)

    空講理論知識(shí)記憶不深刻,所以簡單的用戶管理系統(tǒng)項(xiàng)目帶領(lǐng)大家快速直接使用Flask,用的都是很簡單的技術(shù)點(diǎn), 重點(diǎn)是session的使用 ,先知道怎么用(因?yàn)槭褂煤芎唵畏奖悖?后續(xù)會(huì)慢慢剖析Flask源碼,帶大家把Flask扒開看看?。?! 在 Flask 中,Session(會(huì)話)是一種用于 在不

    2024年02月12日
    瀏覽(27)
  • 支付寶小程序獲取用戶授權(quán)并進(jìn)行認(rèn)證登錄流程(前端)

    支付寶小程序獲取用戶授權(quán)并進(jìn)行認(rèn)證登錄流程(前端)

    1.1申請獲取用戶信息能力 ????登錄功能做之前要先溝通好客戶的需求,支付寶小程序獲取用戶授權(quán)調(diào)用相應(yīng)的接口之前要先獲得對應(yīng)的能力。如果需要獲取身份證號(hào)、手機(jī)號(hào)、姓名,則需要登錄支付寶開放平臺(tái),登錄企業(yè)賬號(hào)后,在控制臺(tái)–能力管理–添加“獲取會(huì)員信

    2024年02月11日
    瀏覽(24)
  • 從0開始使用flask搭建WEB前端可視化界面

    從0開始使用flask搭建WEB前端可視化界面

    模板 將其中的 html 結(jié)尾的文件放入 template 文件夾,其余的放入 static 文件夾,再創(chuàng)建一個(gè) python 文件使用 flask ,文件結(jié)構(gòu)如下: 以該文件為例: 我們將所有的 html 文件放入 template 文件夾,其他文件夾如 js 、 css 、 vendor 等放入 static 文件夾( assets 直接放入static也可以) 移

    2024年02月01日
    瀏覽(25)
  • 如何使用Python Flask和MySQL創(chuàng)建管理用戶的REST API

    如何使用Python Flask和MySQL創(chuàng)建管理用戶的REST API

    部分?jǐn)?shù)據(jù)來源: ChatGPT? 引言 ????????在現(xiàn)代化的應(yīng)用開發(fā)中,數(shù)據(jù)庫是一個(gè)非常重要的組成部分。關(guān)系型數(shù)據(jù)庫(例如:MySQL、PostgreSQL)在這方面尤其是很流行。Flask是一個(gè)Python的web框架,非常適合實(shí)現(xiàn)REST API。在這篇文章中,我們將介紹如何使用Python Flask和MySQL創(chuàng)建一個(gè)

    2024年02月08日
    瀏覽(28)
  • Ceph:關(guān)于 Ceph 用戶認(rèn)證授權(quán)管理的一些筆記

    Ceph:關(guān)于 Ceph 用戶認(rèn)證授權(quán)管理的一些筆記

    準(zhǔn)備考試,整理 Ceph 相關(guān)筆記 博文內(nèi)容涉及, Ceph 用戶管理,認(rèn)證管理,權(quán)限管理 以及相關(guān) Demo 理解不足小伙伴幫忙指正 對每個(gè)人而言,真正的職責(zé)只有一個(gè):找到自我。然后在心中堅(jiān)守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是對大眾

    2024年02月11日
    瀏覽(18)
  • ES X-Pack密碼認(rèn)證與用戶管理

    ES X-Pack密碼認(rèn)證與用戶管理

    用戶數(shù)據(jù)的安全性一直被人詬病且默認(rèn)沒有密碼認(rèn)證,Elasticsearch在6.8之前官方的X-pack安全認(rèn)證功能都是收費(fèi)的,所以很多人都采用Search?Guard或者ReadOnly?REST這些免費(fèi)的安全插件對Elasticsearch進(jìn)行安全認(rèn)證。從Elasticsearch?6.8開始,Security?納入?x-pack?的?Basic?版本中,免費(fèi)使用一

    2024年02月15日
    瀏覽(24)
  • 關(guān)于Open Shift(OKD) 中 用戶認(rèn)證、權(quán)限管理、SCC 管理的一些筆記

    關(guān)于Open Shift(OKD) 中 用戶認(rèn)證、權(quán)限管理、SCC 管理的一些筆記

    因?yàn)閰⒓涌荚?,?huì)陸續(xù)分享一些 OpenShift 的筆記 博文內(nèi)容為 openshift 用戶認(rèn)證和權(quán)限管理以及 scc 管理相關(guān)筆記 學(xué)習(xí)環(huán)境為 openshift v3 的版本,有些舊 這里如果專門學(xué)習(xí) openshift ,建議學(xué)習(xí) v4 版本 理解不足小伙伴幫忙指正 對每個(gè)人而言,真正的職責(zé)只有一個(gè):找到自我。然后

    2023年04月25日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包