iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0

前幾天已經知道了資料庫怎麼操作了,今天我會先簡單介紹Flask的另一個套件Flask-Login

什麼是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() :這個方法返回用戶的唯一識別符。通常,它返回用戶的主鍵,用於在登入時識別用戶。

今天我們先簡單帶過,明天會接著今天的文章內容繼續做補充。


上一篇
[Day 16] Flask SQLAlchemy (4) 多對多關聯
下一篇
[Day 18]申請openAI的API key
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言