昨天记了手脚架 Werkzeug 的几个小工具( Werkzeug 的功能函数 ),今天再补几个中间件。之前在 HackerProxy (原gateway)中,便是通过自定义了一堆 Middleware,来把用户验证等常用逻辑完成的。第一次看到这种俄罗斯套娃式的代码我是震惊的,不过现在认为 Middleware 的确可以适当做一些比较轻的处理。
SharedDataMiddleware
SharedDataMiddleware 是提供一个静态文件分享(下载)的路由。和 flask 中默认的 static 不同,flask 是利用的 send_file
,而 SharedDataMiddleware 可以直接在 app 里注册相关的路由,并绑定一个磁盘路径,并分享这个路径下的文件。
import os
from werkzeug.wsgi import SharedDataMiddleware
app = SharedDataMiddleware(app, {
'/shared': os.path.join(os.path.dirname(__file__), 'shared')
})
ProfilerMiddleware
ProfilerMiddleware 是一个查看性能的中间件,它会在 profile_dir
下写入访问页面的程序运行状况,包括执行了那些函数,以及运行时间等。
from werkzeug.contrib.profiler import ProfilerMiddleware
app.wsgi_app = ProfilerMiddleware(app, profile_dir="/tmp")
但是如果使用 flask-debugtoolbar 这个拓展,便可以在 Web 上直接查看结果,因此不太建议直接用这个中间件。
DispacherMiddleware
DispatcherMiddleware 是个蛮好玩的中间件,他可以向一个 app 注册其他 app:
from werkzeug.wsgi import DispatcherMiddleware
app.wsgi_app = DispatcherMiddleware(app, {
'/app2': app2,
'/app3': app3
})
这时,访问 /app2 前缀的 url 就会使用 app2 的相关逻辑。如果对于一个程序可能有分开的需求,可以利用 DispacherMiddleware 做一些插拔操作。