iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0

前幾天有稍微介紹了一點點Flask Login,今天會接著繼續補充。

使用 @login_manager.user_loader 裝飾器

現在,我們需要告訴 Flask-Login 如何載入已登入的用戶。這是使用 @login_manager.user_loader 裝飾器來完成的。首先,透過前幾天完成的初始化Flask Login,接下來,我們使用 @login_manager.user_loader 裝飾器定義一個函數,該函數負責載入已登入的用戶:

@login_manager.user_loader
def load_user(user_id):
    # 在這裡,你應該查詢用戶模型並返回對應的用戶對象
    user = User.query.get(int(user_id))
    return user

登入和登出

  • 登入用戶:
from flask import render_template, request, redirect, url_for
from flask_login import login_user

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        
        # 在這裡,應該要驗證用戶提供的用戶名稱和密碼
        # 如果驗證成功,使用以下代碼登入用戶
        # user = User.query.filter_by(username=username).first()
        # if user and user.password == password:
        #     login_user(user)
        #     return redirect(url_for('profile'))
    
    return render_template('login.html')

在這個示例中,當用戶提交表單時,我們獲取用戶提供的用戶名稱和密碼,然後進行驗證。如果驗證成功,我們可以使用 login_user 函數來登入用戶,然後將用戶重定向到他們的個人檔案頁面。

  • 登出用戶:
from flask_login import logout_user

@app.route('/logout')
def logout():
    logout_user()
    return redirect(url_for('login'))

這個視圖非常簡單,只需使用 logout_user 函數登出用戶,然後重定向到登入頁面。

保護路由

使用 @login_required 裝飾器可以保護路由,只有已登入用戶才能訪問:

@app.route('/settings')
@login_required
def settings():
    ...

未登錄用戶如果嘗試訪問這個路由會被重定向到登錄頁面。

通過 Flask-Login 提供的這些功能,我們可以非常容易地在 Flask 應用程式中實現用戶登錄和授權功能。


上一篇
[Day 25]打造一個聊天室(4)
下一篇
[Day 27]Flask RESTful API(1)
系列文
從開始到放棄的Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言