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

可以使用多種方法在Python中連接兩個列表:1.使用 操作符,簡單但在大列表中效率低;2.使用extend方法,效率高但會修改原列表;3.使用 =操作符,兼具效率和可讀性;4.使用itertools.chain函數,內存效率高但需額外導入;5.使用列表解析,優雅但可能過於復雜。選擇方法應根據代碼上下文和需求。

有多種方法可以合併Python列表:1.使用 操作符,簡單但對大列表不內存高效;2.使用extend方法,內存高效但會修改原列表;3.使用itertools.chain,適用於大數據集;4.使用*操作符,一行代碼合併小到中型列表;5.使用numpy.concatenate,適用於大數據集和性能要求高的場景;6.使用append方法,適用於小列表但效率低。選擇方法時需考慮列表大小和應用場景。

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

Python中,for循環用於遍歷可迭代對象,while循環用於條件滿足時重複執行操作。 1)for循環示例:遍歷列表並打印元素。 2)while循環示例:猜數字遊戲,直到猜對為止。掌握循環原理和優化技巧可提高代碼效率和可靠性。

要將列表連接成字符串,Python中使用join()方法是最佳選擇。 1)使用join()方法將列表元素連接成字符串,如''.join(my_list)。 2)對於包含數字的列表,先用map(str,numbers)轉換為字符串再連接。 3)可以使用生成器表達式進行複雜格式化,如','.join(f'({fruit})'forfruitinfruits)。 4)處理混合數據類型時,使用map(str,mixed_list)確保所有元素可轉換為字符串。 5)對於大型列表,使用''.join(large_li

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增強效率和通用性。

theKeyDifferencesBetnewpython's“ for”和“ for”和“ loopsare:1)” for“ loopsareIdealForiteringSequenceSquencesSorkNowniterations,而2)”,而“ loopsareBetterforConterContinuingUntilacTientInditionIntionismetismetistismetistwithOutpredefinedInedIterations.un

在Python中,可以通過多種方法連接列表並管理重複元素:1)使用 運算符或extend()方法可以保留所有重複元素;2)轉換為集合再轉回列表可以去除所有重複元素,但會丟失原有順序;3)使用循環或列表推導式結合集合可以去除重複元素並保持原有順序。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。