首頁 > 後端開發 > Python教學 > Python伺服器程式設計:使用Flask-Login實現使用者登入

Python伺服器程式設計:使用Flask-Login實現使用者登入

WBOY
發布: 2023-06-18 16:40:59
原創
2080 人瀏覽過

Python伺服器程式設計:使用Flask-Login實作使用者登入

隨著網路應用程式的發展與普及,使用者登入已經成為了許多應用程式不可或缺的功能。在Python伺服器程式設計中,Flask是一款廣泛使用的Web開發框架。此外,Flask還提供了許多第三方擴展,例如Flask-Login,可協助我們快速實現使用者登入功能。

本文將介紹如何使用Flask-Login擴充在Python伺服器中實作使用者登入功能。在此之前,我們需要先安裝Flask和Flask-Login擴充。可以使用pip指令進行安裝:

pip install Flask Flask-Login
登入後複製

現在開始實作我們的使用者登入系統。

  1. 建立Flask應用程式

首先,我們需要建立一個Flask應用程式。在根目錄下創建一個app.py文件,並在其中編寫以下代碼:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True)
登入後複製

在這個示例中,我們創建了一個Flask應用程序,並定義了一個路由,根路由返回“Hello World !」。我們也使用__name__ == "__main__"條件語句來確保只有在我們執行腳本時才執行Flask應用程式。

現在,我們已經成功創建了一個簡單的Flask應用程式。

2.建立使用者模型

在本範例中,我們假設使用者的使用者名稱和密碼已經儲存到資料庫中。因此,我們需要先定義使用者模型,以便在登入時檢查使用者是否存在。

在app.py檔案中加入以下程式碼:

from flask_login import UserMixin

class User(UserMixin):
    def __init__(self, id):
        super().__init__()
        self.id = id

    def __repr__(self):
        return f"<User {self.id}>"
登入後複製

在這個範例中,我們定義了一個User類,它繼承自Flask-Login的UserMixin類。 UserMixin提供了一些有用的屬性和方法,包括:

  • is_authenticated:如果使用者已經通過驗證,則為True。
  • is_active:如果使用者處於活動狀態,則為True。
  • is_anonymous:如果使用者未經身份驗證,則為True。
  • get_id:傳回使用者ID的字串表示形式。

在User類別的建構子中,我們傳入了使用者的ID。我們還定義了一個__repr__方法,以便在偵錯和測試期間查看有關使用者物件的更多資訊。

  1. 寫登入視圖

現在,我們需要寫一個登入視圖,讓使用者輸入他們的使用者名稱和密碼。如果使用者的使用者名稱和密碼正確,則登入成功,並將使用者物件新增至Flask-Login的使用者會話中。

在app.py檔案中加入以下程式碼:

from flask_login import LoginManager, login_user, current_user

login_manager = LoginManager()
login_manager.init_app(app)

@login_manager.user_loader
def load_user(user_id):
    return User(user_id)

@app.route("/login")
def login():
    user_id = request.args.get("user_id")
    password = request.args.get("password")
    if user_id and password:
        # 省略查询数据库的代码
        user = User(user_id)
        login_user(user)
        return "Login success!"
    else:
        return "Login failed!"

@app.route("/logout")
def logout():
    logout_user()
    return "Logout success!"
登入後複製

在這個範例中,我們首先建立了一個LoginManager物件。然後,我們定義了一個user_loader回呼函數,該函數將使用者ID作為參​​數,並傳回與該ID對應的使用者物件。在本範例中,我們建立了一個新的User對象,並將該ID作為參​​數傳遞。

接下來,我們定義了一個登入視圖。在視圖函數中,我們使用request.args.get方法從查詢字串中取得使用者ID和密碼。然後,我們檢查使用者ID和密碼是否有效。如果使用者的使用者名稱和密碼正確,則建立一個新的User對象,並使用login_user函數將該物件新增至Flask-Login的使用者會話中。如果使用者的使用者名稱和密碼不正確,則該使用者無法登入。

最後,我們定義了一個註銷視圖,它使用logout_user函數從Flask-Login的使用者會話中刪除當前使用者對象,並傳回訊息表示註銷成功。

  1. 保護其他視圖

現在,我們已經實作了使用者登入系統,但我們未使用它來保護其他視圖。在本範例中,我們將保護一個稱為「profile」的頁面,該頁面只有在使用者登入後才可以存取。如果使用者未登錄,則將重新導向至登入頁面。

在app.py檔案中加入以下程式碼:

from flask_login import login_required

@app.route("/profile")
@login_required
def profile():
    return f"Welcome, {current_user.id}!"
登入後複製

在這個範例中,我們使用login_required裝飾器來保護「profile」路由。如果使用者未登錄,則該裝飾器將會重新導向至登入頁面。

在保護視圖時,我們也使用current_user全域變數來存取目前登入使用者的資訊。在本範例中,我們新增了一個簡單的歡迎訊息,其中包含目前登入使用者的ID。

  1. 執行應用程式

現在,我們已經完成了使用者登入系統的所有實作。讓我們運行應用程式並測試它。

在終端機中輸入以下命令來啟動應用程式:

python app.py
登入後複製

在瀏覽器中輸入以下URL來存取主頁:

http://localhost:5000/
登入後複製

你應該會看到「Hello World !”字串。現在嘗試存取以下URL:

http://localhost:5000/profile
登入後複製

由於你不是認證的用戶,你將被重定向到登入頁面。在查詢字串中輸入有效的使用者ID和密碼,例如:

http://localhost:5000/login?user_id=1&password=password123
登入後複製

如果你輸入的使用者名稱和密碼正確,則應該看到「Login success!」訊息。現在,再次訪問“/profile”路由,它應該顯示歡迎訊息,其中包含當前登入使用者的ID。

如果你在浏览器中访问以下URL,则可以注销当前会话:

http://localhost:5000/logout
登入後複製

这样就完成了用户登录系统的所有实现。

总结

在本文中,我们介绍了如何使用Flask-Login扩展在Python服务器中实现用户登录功能。使用Flask-Login可以方便地验证和保护Web应用程序中的用户数据。此外,Flask-Login提供了许多有用的功能和方法,如会话管理和用户保护。希望这篇文章能够帮助你更好地了解如何使用Flask-Login编写Python服务器应用程序。

以上是Python伺服器程式設計:使用Flask-Login實現使用者登入的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板