Python伺服器程式設計:使用Flask-Login實作使用者登入
隨著網路應用程式的發展與普及,使用者登入已經成為了許多應用程式不可或缺的功能。在Python伺服器程式設計中,Flask是一款廣泛使用的Web開發框架。此外,Flask還提供了許多第三方擴展,例如Flask-Login,可協助我們快速實現使用者登入功能。
本文將介紹如何使用Flask-Login擴充在Python伺服器中實作使用者登入功能。在此之前,我們需要先安裝Flask和Flask-Login擴充。可以使用pip指令進行安裝:
pip install Flask Flask-Login
現在開始實作我們的使用者登入系統。
首先,我們需要建立一個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__
方法,以便在偵錯和測試期間查看有關使用者物件的更多資訊。
現在,我們需要寫一個登入視圖,讓使用者輸入他們的使用者名稱和密碼。如果使用者的使用者名稱和密碼正確,則登入成功,並將使用者物件新增至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的使用者會話中刪除當前使用者對象,並傳回訊息表示註銷成功。
現在,我們已經實作了使用者登入系統,但我們未使用它來保護其他視圖。在本範例中,我們將保護一個稱為「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。
現在,我們已經完成了使用者登入系統的所有實作。讓我們運行應用程式並測試它。
在終端機中輸入以下命令來啟動應用程式:
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中文網其他相關文章!