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

【Python開發(fā)】一文詳解Flask-Login

這篇具有很好參考價(jià)值的文章主要介紹了【Python開發(fā)】一文詳解Flask-Login。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一文詳解 Flask-Login

1.介紹

Flask-Login 為 Flask 提供用戶會(huì)話管理。它處理登錄、注銷和長(zhǎng)時(shí)間記住用戶會(huì)話等常見任務(wù)。

Flask-Login 不綁定到任何特定的數(shù)據(jù)庫系統(tǒng)或權(quán)限模型。唯一的要求是您的 用戶對(duì)象實(shí)現(xiàn)一些方法,并且您向能夠 從用戶 ID 加載用戶 的擴(kuò)展提供回調(diào)。

GitHub:https://github.com/maxcountryman/flask-login

【Python開發(fā)】一文詳解Flask-Login

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

  • login-view:驗(yàn)證失敗跳轉(zhuǎn)的界面。
  • login-message:用戶重定向到登錄頁面時(shí)閃出的消息。
  • refresh-view:用戶需要重新進(jìn)行身份驗(yàn)證時(shí)要重定向到的視圖的名稱。
  • needs-refresh-message:用戶重定向到 “需要刷新” 頁面時(shí)閃出的消息。
  • session-protection:使用會(huì)話保護(hù)的模式。這可以是 basic(默認(rèn))或 strong,或 None 禁用。
class LoginManager:
    def __init__(self, app=None, add_context_processor=True):
        #: A class or factory function that produces an anonymous user, which
        #: is used when no one is logged in.
        self.anonymous_user = AnonymousUserMixin

        #: The name of the view to redirect to when the user needs to log in.
        #: (This can be an absolute URL as well, if your authentication
        #: machinery is external to your application.)
        self.login_view = None

        #: Names of views to redirect to when the user needs to log in,
        #: per blueprint. If the key value is set to None the value of
        #: :attr:`login_view` will be used instead.
        self.blueprint_login_views = {}

        #: The message to flash when a user is redirected to the login page.
        self.login_message = LOGIN_MESSAGE

        #: The message category to flash when a user is redirected to the login
        #: page.
        self.login_message_category = LOGIN_MESSAGE_CATEGORY

        #: The name of the view to redirect to when the user needs to
        #: reauthenticate.
        self.refresh_view = None

        #: The message to flash when a user is redirected to the 'needs
        #: refresh' page.
        self.needs_refresh_message = REFRESH_MESSAGE

        #: The message category to flash when a user is redirected to the
        #: 'needs refresh' page.
        self.needs_refresh_message_category = REFRESH_MESSAGE_CATEGORY

        #: The mode to use session protection in. This can be either
        #: ``'basic'`` (the default) or ``'strong'``, or ``None`` to disable
        #: it.
        self.session_protection = "basic"

		......

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

def user_loader(self, callback):
        """
        This sets the callback for reloading a user from the session. The
        function you set should take a user ID (a ``str``) and return a
        user object, or ``None`` if the user does not exist.
        :param callback: The callback for retrieving a user object.
        :type callback: callable
        """
        self._user_callback = callback
        return self.

自定義回調(diào)函數(shù)。在執(zhí)行下面這段代碼之后,注冊(cè)了 load_user() 這個(gè)自定義的 callback

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

utils

  • login_required:如果使用此裝飾視圖,它將確保在調(diào)用實(shí)際視圖之前登錄并驗(yàn)證當(dāng)前用戶。如果驗(yàn)證不通過,那么則會(huì)調(diào)用 LoginManager.unauthorized()。
  • login_user:記錄 / 保存當(dāng)前成功登陸的用戶。
  • logout_user:登出功能類似,除了基本的操作外,還需要把 flask-login 中的登出進(jìn)行操作。

UserMixin:要簡(jiǎn)便地實(shí)現(xiàn)用戶類,你可以從 UserMixin 繼承,它提供了對(duì)下列這些方法的默認(rèn)實(shí)現(xiàn)。(雖然這不是必須的。)

  • 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。

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 所指定的視圖。

2.實(shí)戰(zhàn)

首先,我們將設(shè)置一個(gè) Flask 應(yīng)用程序:

import flask

app = flask.Flask(__name__)
app.secret_key = 'super secret string'  # Change this!

Flask-Login 通過登錄管理器工作。首先,我們將通過實(shí)例化登錄管理器并告訴它我們的 Flask 應(yīng)用程序來設(shè)置登錄管理器:

import flask_login

login_manager = flask_login.LoginManager() # 初始化一個(gè) LoginManager 類對(duì)象

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

login_manager.init_app(app) # 配置該對(duì)象

為了簡(jiǎn)單起見,我們將使用字典來表示用戶數(shù)據(jù)庫。在實(shí)際應(yīng)用程序中,這將是一個(gè)實(shí)際的持久層。然而,重要的是要指出這是 Flask-Login 的一個(gè)特性:它不關(guān)心你的數(shù)據(jù)是如何存儲(chǔ)的,只要你告訴它如何檢索它!

# Our mock database.
users = {'foo@bar.tld': {'password': 'secret'}}

我們還需要告訴 Flask-Login 如何從 Flask 請(qǐng)求及其會(huì)話中 加載用戶。為此,我們需要定義我們的用戶對(duì)象、一個(gè) user_loader 回調(diào)和一個(gè) request_loader 回調(diào)。

class User(flask_login.UserMixin):
    pass

@login_manager.user_loader
def user_loader(email):
    if email not in users:
        return

    user = User()
    user.id = email
    return user

@login_manager.request_loader
def request_loader(request):
    email = request.form.get('email')
    if email not in users:
        return

    user = User()
    user.id = email
    return user

現(xiàn)在我們準(zhǔn)備定義我們的觀點(diǎn)。我們可以從登錄視圖開始,它將使用身份驗(yàn)證位填充會(huì)話。之后我們可以定義一個(gè)需要身份驗(yàn)證的視圖。

@app.route('/login', methods=['GET', 'POST'])
def login():
    if flask.request.method == 'GET':
        return '''
               <form action='login' method='POST'>
                <input type='text' name='email' id='email' placeholder='email'/>
                <input type='password' name='password' id='password' placeholder='password'/>
                <input type='submit' name='submit'/>
               </form>
               '''

    email = flask.request.form['email']
    if email in users and flask.request.form['password'] == users[email]['password']:
        user = User()
        user.id = email
        flask_login.login_user(user)
        return flask.redirect(flask.url_for('protected'))

    return 'Bad login'


@app.route('/protected')
@flask_login.login_required
def protected():
    return 'Logged in as: ' + flask_login.current_user.id

最后,我們可以定義一個(gè)視圖來清除會(huì)話并將用戶注銷。

@app.route('/logout')
def logout():
    flask_login.logout_user()
    return 'Logged out'

我們現(xiàn)在有了一個(gè)基本的工作程序,它使用了基于會(huì)話的認(rèn)證。為了使事情圓滿結(jié)束,我們應(yīng)該為登錄失敗提供一個(gè)回調(diào)。文章來源地址http://www.zghlxwxcb.cn/news/detail-411567.html

@login_manager.unauthorized_handler
def unauthorized_handler():
    return 'Unauthorized', 401

到了這里,關(guān)于【Python開發(fā)】一文詳解Flask-Login的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Python - flask后端開發(fā)筆記

    ? Flask入門 有一篇很全面的博客可以參考:Python Flask Web 框架入門 跨域問題處理 文件發(fā)送 ?

    2024年02月07日
    瀏覽(26)
  • 一文詳解Mac搭建Vulkan開發(fā)環(huán)境

    一文詳解Mac搭建Vulkan開發(fā)環(huán)境

    本文為 Vukan系列的第二篇文章 , 上一篇 文章對(duì) Vulkan進(jìn)行了簡(jiǎn)單介紹 ,并對(duì) 其與OpenGL的優(yōu)劣勢(shì)進(jìn)行了比較 ,為應(yīng)用開發(fā)人員在 選擇圖形API方面提供了建議 。下邊開始本文的主要內(nèi)容,詳細(xì)介紹在Mac操作系統(tǒng)中, 如何搭建Vulkan開發(fā)環(huán)境 。 Vulkan是一種基于命令緩沖區(qū)的 底層

    2024年02月11日
    瀏覽(21)
  • 【一文詳解】知識(shí)分享:(C#開發(fā)學(xué)習(xí)快速入門)

    【一文詳解】知識(shí)分享:(C#開發(fā)學(xué)習(xí)快速入門)

    c語言 是面向過程。 c++ 是面向過程+面向?qū)ο蟆?c# 是純粹的面向?qū)ο? 核心思想是以人的思維習(xí)慣來分析和解決問題。萬物皆對(duì)象 。 面向?qū)ο箝_發(fā)步驟: 分析對(duì)象 特征 行為 關(guān)系(對(duì)象關(guān)系/類關(guān)系) 寫代碼: 特征–成員變量 方法–成員方法 實(shí)例化–具體對(duì)象 Note(補(bǔ)充知識(shí))

    2024年01月19日
    瀏覽(130)
  • Python Web 開發(fā)之 Flask 入門實(shí)踐

    Python Web 開發(fā)之 Flask 入門實(shí)踐

    導(dǎo)語:Flask 是一個(gè)輕量級(jí)的 Python Web 框架,廣受開發(fā)者喜愛。本文將帶領(lǐng)大家了解 Flask 的基本概念、搭建一個(gè)簡(jiǎn)單的 Web 項(xiàng)目以及如何進(jìn)一步擴(kuò)展功能。 Flask 是一個(gè)基于 Werkzeug 和 Jinja2 的微型 Web 框架,它的特點(diǎn)是輕量、易學(xué)習(xí)、可擴(kuò)展。使用 Flask,我們可以快速構(gòu)建 Web 應(yīng)

    2024年01月22日
    瀏覽(27)
  • 【python】Flask網(wǎng)頁開發(fā)——論壇項(xiàng)目實(shí)戰(zhàn)(完整代碼)

    【python】Flask網(wǎng)頁開發(fā)——論壇項(xiàng)目實(shí)戰(zhàn)(完整代碼)

    筆記為自我總結(jié)整理的學(xué)習(xí)筆記,若有錯(cuò)誤歡迎指出喲~ 【論壇項(xiàng)目實(shí)戰(zhàn)】 【python】Flask網(wǎng)頁開發(fā)——論壇項(xiàng)目實(shí)戰(zhàn)(完整代碼) 【python】Flask網(wǎng)頁開發(fā)——論壇項(xiàng)目實(shí)戰(zhàn)(1.導(dǎo)航條實(shí)現(xiàn)) 【python】Flask網(wǎng)頁開發(fā)——論壇項(xiàng)目實(shí)戰(zhàn)(2.登錄與注冊(cè)) 【python】Flask網(wǎng)頁開發(fā)——論

    2024年04月28日
    瀏覽(23)
  • Python Web開發(fā):Django與Flask框架

    Django和Flask都是Python中非常受歡迎的Web開發(fā)框架。雖然它們都是用于構(gòu)建Web應(yīng)用程序的工具,但它們?cè)谠O(shè)計(jì)理念、使用方式和適用場(chǎng)景等方面存在一些差異。 Django Django是一個(gè)“大而全”的框架,遵循MVC設(shè)計(jì)模式。它內(nèi)置了很多功能,如ORM(對(duì)象關(guān)系映射)、模板引擎、表單處

    2024年02月22日
    瀏覽(20)
  • Python Flask框架-開發(fā)簡(jiǎn)單博客-項(xiàng)目布局、應(yīng)用設(shè)置

    Python Flask框架-開發(fā)簡(jiǎn)單博客-項(xiàng)目布局、應(yīng)用設(shè)置

    作者:Eason_LYC 悲觀者預(yù)言失敗,十言九中。 樂觀者創(chuàng)造奇跡,一次即可。 一個(gè)人的價(jià)值,只在于他所擁有的。所以可以不學(xué)無術(shù),但不能一無所有! 技術(shù)領(lǐng)域:WEB安全、網(wǎng)絡(luò)攻防 關(guān)注WEB安全、網(wǎng)絡(luò)攻防。我的專欄文章知識(shí)點(diǎn)全面細(xì)致,邏輯清晰、結(jié)合實(shí)戰(zhàn),讓你在學(xué)習(xí)路

    2024年02月02日
    瀏覽(52)
  • python三大開發(fā)框架django、 flask 和 fastapi 對(duì)比

    python三大開發(fā)框架django、 flask 和 fastapi 對(duì)比

    本文講述了什么啟發(fā)了 FastAPI 的誕生,它與其他替代框架的對(duì)比,以及從中汲取的經(jīng)驗(yàn)。 如果不是基于前人的成果,F(xiàn)astAPI 將不會(huì)存在。在 FastAPI 之前,前人已經(jīng)創(chuàng)建了許多工具 。 幾年來,我一直在避免創(chuàng)建新框架。首先,我嘗試使用許多不同的框架,插件和工具來解決

    2024年02月10日
    瀏覽(27)
  • Python項(xiàng)目開發(fā):Flask基于Python的天氣數(shù)據(jù)可視化平臺(tái)

    Python項(xiàng)目開發(fā):Flask基于Python的天氣數(shù)據(jù)可視化平臺(tái)

    目錄 步驟一:數(shù)據(jù)獲取 步驟二:設(shè)置Flask應(yīng)用程序 步驟三:處理用戶輸入和數(shù)據(jù)可視化 步驟四:渲染HTML模板 總結(jié) 在這個(gè)數(shù)字化時(shí)代,數(shù)據(jù)可視化已經(jīng)成為我們理解和解釋信息的重要手段。在這個(gè)項(xiàng)目中,我們將使用Python語言來開發(fā)一個(gè)基于Flask框架的天氣數(shù)據(jù)可視化平臺(tái)

    2024年02月09日
    瀏覽(33)
  • Python Flask Web開發(fā)二:數(shù)據(jù)庫創(chuàng)建和使用

    Python Flask Web開發(fā)二:數(shù)據(jù)庫創(chuàng)建和使用

    數(shù)據(jù)庫在 Web 開發(fā)中起著至關(guān)重要的作用。它不僅提供了數(shù)據(jù)的持久化存儲(chǔ)和管理功能,還支持?jǐn)?shù)據(jù)的關(guān)聯(lián)和連接,保證數(shù)據(jù)的一致性和安全性。通過合理地設(shè)計(jì)和使用數(shù)據(jù)庫,開發(fā)人員可以構(gòu)建強(qiáng)大、可靠的 Web 應(yīng)用程序,滿足用戶的需求。這里介紹:SQLAlchemy 安裝pymysql和

    2024年02月10日
    瀏覽(102)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包