在本文中,我将介绍一个基于 Flask 框架的 Web 应用程序,重点展示其用户登录功能、请求日志记录和一些中间件处理方法。以下是代码的详细分析和总结。
应用程序配置
-
应用实例化和配置
创建一个 Flask 应用实例,并设置调试模式。配置密钥
app.secret_key用于对 session 数据进行加密,确保数据的安全性。设置 session 过期时间为 7 天,使用app.permanent_session_lifetime进行配置。app = Flask(__name__) app.debug = True LOGIN_SESSION_KEY = 'logged_in' app.secret_key = 'sjfasjfsafs1234214242kkasfa@1343dd' app.permanent_session_lifetime = timedelta(days=7)
用户登录验证
-
登录验证装饰器
定义一个
login_required装饰器,用于检查用户是否已经登录( session['logged_in'] = True )。如果用户未登录,则重定向到登录页面。def login_required(view_func): @wraps(view_func) def decorated(*args, **kwargs): if LOGIN_SESSION_KEY not in session or not session[LOGIN_SESSION_KEY]: return redirect(url_for('login_page')) return view_func(*args, **kwargs) return decorated
响应头处理
-
禁止缓存
使用
@app.after_request装饰器来设置响应头,禁止浏览器缓存,确保每次请求都能从服务器获取最新数据。@app.after_request def add_header(response): response.headers['Cache-Control'] = 'no-cache, no-store, must-revalidate' response.headers['Pragma'] = 'no-cache' response.headers['Expires'] = '0' return response
请求日志记录
-
日志记录中间件
使用
@app.before_request装饰器,记录每个请求的详细信息,包括 IP 地址、请求方法、请求路径、请求参数和请求时间。通过request.remote_addr获取客户端 IP 地址,通过request.method获取请求方法,通过request.path获取请求路径,通过request.args.to_dict()获取请求参数等。@app.before_request def log_ip_address(): ip = request.remote_addr method = request.method
登录页面
-
登录页面路由
定义登录路由
/login,支持 POST 和 GET 方法,返回登录页面的模板app_login.html。@app.route("/login", methods=['POST', "GET"]) def login_page(): """登录""" return render_template('app_login.html')
总结
通过以上代码,我们构建了一个具备基本用户登录和请求日志记录功能的 Flask 应用程序。其主要功能包括:
- 用户登录验证:使用装饰器实现用户登录验证,确保未登录用户无法访问受保护的页面。
- 禁止缓存:设置响应头防止浏览器缓存,确保用户每次请求都能获取最新数据。
- 请求日志记录:记录每个请求的详细信息,便于后续的数据分析和问题排查。
- 登录页面:提供用户登录的界面,支持 POST 和 GET 请求。