面试题答案
一键面试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)