目录
一、简单示例
要在Flask中检测用户是否登录,可以使用以下方法:
-
在用户登录时,将用户的登录状态存储在会话中。例如,使用
flask_login
库进行用户认证和登录。 -
在需要检查用户是否登录的视图函数中,从会话中获取用户的登录状态,并根据需要执行相应的操作。
以下是一个简单的示例:
首先,安装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
对象来判断用户是否已登录。如果用户未登录,我们可以重定向到登录页面。
稍作修改:
(id即为用户名,前端传递回来的是user_name,与后端user_id是同意。)
python
from flask_login import UserMixin
class User(UserMixin):
def __init__(self, id):
self.id = id
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将被自动过期并清除。