解决:Python-Flask框架—通过flask_login模块及Session模块检测是否有用户登录

目录

一、简单示例

二、查看session信息

三、设置session过期时间


一、简单示例

要在Flask中检测用户是否登录,可以使用以下方法:

  1. 在用户登录时,将用户的登录状态存储在会话中。例如,使用flask_login库进行用户认证和登录。

  2. 在需要检查用户是否登录的视图函数中,从会话中获取用户的登录状态,并根据需要执行相应的操作。

以下是一个简单的示例:

首先,安装flask_login库:

复制代码
pip install flask-login

然后,创建一个简单的Flask应用并实现用户登录功能:

python 复制代码
from flask import Flask, render_template, redirect, url_for, request, session
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required

app = Flask(__name__)
app.secret_key = 'your_secret_key'
login_manager = LoginManager()
login_manager.init_app(app)

class User(UserMixin):
    def __init__(self, id):
        self.id = id

# 模拟用户数据
users = {'user1': {'password': 'password1'}, 'user2': {'password': 'password2'}}

@login_manager.user_loader
def load_user(user_id):
    return User(user_id)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user_id = request.form['user_id']
        password = request.form['password']
        if user_id in users and users[user_id]['password'] == password:
            user = User(user_id)
            login_user(user)
            return redirect(url_for('protected'))
        else:
            return 'Invalid credentials'
    return render_template('login.html')

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

@app.route('/protected')
@login_required
def protected():
    return 'Logged in as: ' + session['username'] + '<br>' 
           + '<a href="/logout">Logout</a>'

if __name__ == '__main__':
    app.run(debug=True)

在这个示例中,我们使用了flask_login库来处理用户认证和登录。当用户成功登录后,我们将用户的登录状态存储在会话中。然后,在需要检查用户是否登录的视图函数(如protected视图)中,我们可以通过检查session对象来判断用户是否已登录。如果用户未登录,我们可以重定向到登录页面。

稍作修改:

Users.py

(id即为用户名,前端传递回来的是user_name,与后端user_id是同意。)

python 复制代码
from flask_login import UserMixin

class User(UserMixin):
    def __init__(self, id):
        self.id = id

app.py

python 复制代码
from flask import Flask,render_template,request,redirect,url_for,url_for,session
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required
from Users import User
app = Flask(__name__)

app.secret_key = 'your_secret_key'
login_manager = LoginManager()
login_manager.init_app(app)

# 模拟用户数据
users = {'admin': {'password': '111111'}, 'abc': {'password': '123456'}}


@login_manager.user_loader
def load_user(user_id):
    return User(user_id)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user_id = request.form['username']
        password = request.form['password']
        if user_id in users and users[user_id]['password'] == password:
            user = User(user_id)
            login_user(user)
            return render_template('index.html')
        else:
            return 'Invalid credentials'
    return render_template('login.html')

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

@app.route('/')
def hello():
    return render_template('login.html')


@app.route('/index')
@login_required
def index():
    return render_template('index.html')

前端登录表单

二、查看session信息

1、使用session对象:

python 复制代码
from flask import session

# 获取当前会话
current_session = session

# 打印会话内容
print(current_session)

2.使用flask_session库:

首先,安装flask_session库:

python 复制代码
pip install flask-session

然后,在Flask应用中配置和使用flask_session库:

python 复制代码
from flask import Flask, render_template, redirect, url_for, request, session
from flask_session import Session

app = Flask(__name__)
app.secret_key = 'your_secret_key'
app.config['SESSION_TYPE'] = 'filesystem'  # 设置会话存储类型为文件系统
Session(app)  # 初始化会话对象

@app.route('/')
def index():
    # 获取当前会话
    current_session = session
    # 打印会话内容
    print(current_session)
    return render_template('index.html')

三、设置session过期时间

在Flask中,可以通过设置PERMANENT_SESSION_LIFETIME配置项来设置session的过期时间。例如,将过期时间设置为30分钟:

python 复制代码
from datetime import timedelta

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(minutes=30)

这样,当用户会话超过30分钟后,session将被自动过期并清除。

在Flask中,可以通过设置PERMANENT_SESSION_LIFETIME配置项来设置session的过期时间。例如,将过期时间设置为30秒:

python 复制代码
from datetime import timedelta

app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(seconds=30)

这样,当用户会话超过30秒后,session将被自动过期并清除。

相关推荐
leobertlan2 小时前
2025年终总结
前端·后端·程序员
面向Google编程2 小时前
从零学习Kafka:数据存储
后端·kafka
冷雨夜中漫步2 小时前
Python快速入门(6)——for/if/while语句
开发语言·经验分享·笔记·python
郝学胜-神的一滴3 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再3 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
易安说AI3 小时前
Claude Opus 4.6 凌晨发布,我体验了一整晚,说说真实感受。
后端
易安说AI3 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
易安说AI3 小时前
用 Claude Code 远程分析生产日志,追踪 Claude Max 账户被封原因
后端
颜酱4 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
喵手4 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控