2023.10.20使用特殊装饰器before_request进行登录session认证
简单的认证可以使用if语句对session进行判断,使用装饰器before_request会比较方便。可以实现登录任意页面之前需要验证session的存在。
装饰器的常用写法:
附一个简单登录页面。
1、程序架构
2、程序源代码
'''
# 账户模块
'''
from flask import Blueprint, render_template, Flask, request, redirect, session
from ..utils.md5 import md5
account = Blueprint('account', __name__)
@account.route('/login', methods=['GET','POST'])
def login():
if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd')
pwd_md5 = md5(pwd)
print(pwd_md5)
'''
未连接数据库时的测试用例
'''
if user == 'guest' and pwd_md5 == 'e6cd01c6654d178305ecb8ef97fa6f26': # 将密码替换成md5
session['user_info'] = {'id':154,'nickname':'guest'} # session可以通过字典一次写完
return redirect('/home')
return render_template('login.html', error='用户名或密码错误')
@account.route('/logout') # 注销功能
def logout():
if 'user_info' in session:
del session['user_info']
return redirect('login')
bindex.py
'''
# 主页模块
'''
from flask import Blueprint, render_template, Flask, request, redirect, session
bindex = Blueprint('bindex', __name__)
# 特殊装饰器,用于各个页面进入时的session的认证
@bindex.before_request
def process_request():
if session.get('user_info'):
return None
return redirect('/login') # 拦截,返回注册页面# 登录页面
@bindex.route('/home')
def home():
return render_template('home.html')
@bindex.route('/manu1')
def manu1():
return "manu1"
@bindex.route('/detail/<int:nid>')
def detail(nid):
return "detail"
@bindex.route('/manu2',methods=['GET','POST'])
def manu2():
return "manu2"