MST

星途 面试题库

面试题:Python Flask扩展的原理及自定义扩展实现

阐述Flask扩展的工作原理,即Flask是如何与扩展进行交互的。然后,请你自定义一个简单的Flask扩展,这个扩展能在每次请求处理前记录一条日志,记录请求的时间和路径。
21.4万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

Flask扩展工作原理

Flask扩展通常通过向Flask应用对象添加属性、方法或修改其行为来实现功能增强。一般,扩展会在初始化时接受Flask应用实例作为参数(或在后续通过init_app方法传入)。在扩展内部,会利用Flask提供的钩子函数(如请求前、请求后等),注册自定义的处理函数,从而实现与Flask应用的交互。

自定义Flask扩展

import logging
from flask import g, request
from datetime import datetime


class RequestLogger:
    def __init__(self, app=None):
        self.logger = logging.getLogger(__name__)
        self.logger.setLevel(logging.INFO)
        formatter = logging.Formatter('%(asctime)s - %(message)s')
        ch = logging.StreamHandler()
        ch.setFormatter(formatter)
        self.logger.addHandler(ch)
        if app is not None:
            self.init_app(app)

    def init_app(self, app):
        app.before_request(self.log_request)

    def log_request(self):
        log_message = f"{datetime.now()} - {request.path}"
        self.logger.info(log_message)

使用这个扩展的示例代码:

from flask import Flask
from your_module import RequestLogger  # 假设上述代码保存在your_module模块中

app = Flask(__name__)
request_logger = RequestLogger(app)


@app.route('/')
def index():
    return 'Hello, World!'


if __name__ == '__main__':
    app.run(debug=True)