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

目录

一、简单示例

二、查看session信息

三、设置session过期时间


 

一、简单示例

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

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

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

以下是一个简单的示例:

首先,安装flask_login库:

pip install flask-login

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

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是同意。)

from flask_login import UserMixin

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

app.py

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对象:

from flask import session

# 获取当前会话
current_session = session

# 打印会话内容
print(current_session)

 

        2.使用flask_session库:

首先,安装flask_session库:

pip install flask-session

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

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分钟:

from datetime import timedelta

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

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

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

from datetime import timedelta

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码骑士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值