Werkzeug 常用中间件

2017/7/13 posted in  Python 黑魔法

昨天记了手脚架 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 做一些插拔操作。