Flask 应用程序:用户登录和请求日志记录

245 阅读2分钟

在本文中,我将介绍一个基于 Flask 框架的 Web 应用程序,重点展示其用户登录功能、请求日志记录和一些中间件处理方法。以下是代码的详细分析和总结。

应用程序配置

  1. 应用实例化和配置

    创建一个 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)
    

用户登录验证

  1. 登录验证装饰器

    定义一个 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
    

响应头处理

  1. 禁止缓存

    使用 @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
    

请求日志记录

  1. 日志记录中间件

    使用 @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
    

登录页面

  1. 登录页面路由

    定义登录路由 /login,支持 POST 和 GET 方法,返回登录页面的模板 app_login.html

    @app.route("/login", methods=['POST', "GET"])
    def login_page():
        """登录"""
        return render_template('app_login.html')
    

总结

通过以上代码,我们构建了一个具备基本用户登录和请求日志记录功能的 Flask 应用程序。其主要功能包括:

  • 用户登录验证:使用装饰器实现用户登录验证,确保未登录用户无法访问受保护的页面。
  • 禁止缓存:设置响应头防止浏览器缓存,确保用户每次请求都能获取最新数据。
  • 请求日志记录:记录每个请求的详细信息,便于后续的数据分析和问题排查。
  • 登录页面:提供用户登录的界面,支持 POST 和 GET 请求。