前幾天已經知道了資料庫怎麼操作了,今天我會先簡單介紹Flask的另一個套件Flask-Login
。
當我們在Flask開發網站或是應用程式時,實現用戶登入和身分驗證是一個常見的需求,而Flask-Login讓處理用戶登入和變得非常簡單。他提供了幾個主要功能:
用戶會話管理:Flask-Login 管理用戶的登入會話,讓我們可以跟蹤用戶的登入狀態。處理用戶的登入和登出,並提供簡單的方法來檢查用戶是否已登入。
登入和登出視圖:可以定義用戶登入和登出的視圖,以及用戶登入後應該重定向到的位置。他提供了 login_required
裝飾器,用於保護需要登入的視圖,只有已登入的用戶才能訪問這些視圖。
身份驗證檢查:可以透過他提供的方法來檢查用戶的身份,例如檢查用戶是否已登入、是否是活動用戶、是否是匿名用戶等。
自定義登入函數:我們可以定義自己的登入函數,用於驗證用戶提供的登入憑證,例如用戶名稱和密碼。讓我們根據需求實現不同的登入方式,如基本認證、OAuth 認證等。
首先要先確定自己已經安裝了Flask-Login
pip install Flask-Login
from flask import Flask, render_template, redirect, url_for, flash
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin, login_user, login_required, logout_user, current_user
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key' # 設定一個隨機的密鑰
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///your_database.db' # 設定你的資料庫連接
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)
在這邊跟前幾天的教學是一樣的,只需要改成自己需要的配置就可以了。
可以注意到最下面的兩行,應用程式剛剛初始化時,我們創建了一個LoginManager
實例。對於一個應用來說,使用Flask-Login最重要的部分就是LoginManger
類。那什麼是LoginManager
呢?他是 Flask-Login 擴展提供的一個類,主要作用是管理用戶的登入和登出,以及處理用戶身份驗證的相關功能。
接著透過創建實例login_manager = LoginManager()
後,我們還需要進一步配置它,login_manager.init_app(app)
這一行將剛剛創建的 LoginManager 實例初始化並與 Flask 應用程序 (app) 關聯。
這個實例將用於管理用戶登入和身份驗證相關的操作。我們稍後將配置這個實例的其他設置。
有了簡單的配置後我們可以定義用戶的模型
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(100), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
def __repr__(self):
return f'<User {self.username}>'
首先在class User(UserMixin, db.Model):
的UserMixin
是讓class User
繼承了UserMixin
,接著就可以很輕鬆地使用Flask-Login的功能,下面是一些常見的屬性和方法:
is_authenticated
:這是一個屬性,如果用戶已經登入,則返回 True,否則返回 False。
is_active
:這是一個屬性,用於確定用戶是否是活動狀態。通常,你可以將其設置為 True,但如果希望禁用某個帳號,可以將其設置為 False。
is_anonymous
:這是一個屬性,用於確定是否是匿名用戶。匿名用戶通常是未登入的用戶。
get_id()
:這個方法返回用戶的唯一識別符。通常,它返回用戶的主鍵,用於在登入時識別用戶。
今天我們先簡單帶過,明天會接著今天的文章內容繼續做補充。