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

相关推荐
虞书欣的617 分钟前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
源码121522 分钟前
ASP.NET MVC宠物商城系统
后端·asp.net·宠物
FHYAAAX25 分钟前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
PyAIGCMaster34 分钟前
python环境中,敏感数据的存储与读取问题解决方案
服务器·前端·python
何曾参静谧1 小时前
「Py」模块篇 之 PyAutoGUI库自动化图形用户界面库
运维·python·自动化
pumpkin845141 小时前
客户端发送http请求进行流量控制
python·网络协议·http
smj2302_796826521 小时前
用枚举算法解决LeetCode第3348题最小可整除数位乘积II
python·算法·leetcode
Ai 编码助手1 小时前
Go语言 实现将中文转化为拼音
开发语言·后端·golang
hummhumm1 小时前
第 12 章 - Go语言 方法
java·开发语言·javascript·后端·python·sql·golang
hummhumm1 小时前
第 8 章 - Go语言 数组与切片
java·开发语言·javascript·python·sql·golang·database