解决: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将被自动过期并清除。

相关推荐
我是小妖怪,潇洒又自在6 分钟前
springcloud alibaba(九)Nacos Config服务配置
后端·spring·spring cloud
Victor35626 分钟前
Netty(26)如何实现基于Netty的RPC框架?
后端
Victor35636 分钟前
Netty(25)Netty的序列化和反序列化机制是什么?
后端
程序员佳佳1 小时前
2025年大模型终极横评:GPT-5.2、Banana Pro与DeepSeek V3.2实战硬核比拼(附统一接入方案)
服务器·数据库·人工智能·python·gpt·api
qq_12498707531 小时前
重庆三峡学院图书资料管理系统设计与实现(源码+论文+部署+安装)
java·spring boot·后端·mysql·spring·毕业设计
桦说编程1 小时前
并发编程高级技巧:运行时检测死锁,告别死锁焦虑
java·后端·性能优化
刘某的Cloud2 小时前
列表、元组、字典、集合-组合数据类型
linux·开发语言·python
无限大62 小时前
为什么"软件测试"很重要?——从 Bug 到高质量软件的保障
后端
ys~~2 小时前
git学习
git·vscode·python·深度学习·学习·nlp·github
Mqh1807622 小时前
day46 Grad-CAM
python