正文
'/shared'
:
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
),
'shared'
)
})
Flask应用通过以上的代码,app便会成为一个SharedDataMiddleware实例,之后便可以在http://example.com/shared/中访问shared文件夹下的内容。
对于中间件SharedDataMiddleware,Flask应用在初始实例化的时候便有所应用。其中有这样一段代码:
self
.
wsgi_app
=
SharedDataMiddleware
(
self
.
wsgi_app
,
{
self
.
static_path
:
target
})
这段代码显然会将wsgi_app变成一个SharedDataMiddleware对象,这个对象为Flask应用提供一个静态文件夹/static。这样,当整个Flask应用被调用时,self.wsgi_app(environ, start_response)会执行。由于此时self.wsgi_app是一个SharedDataMiddleware对象,所以会先触发SharedDataMiddleware对象的__call__(environ, start_response)方法。如果此时的请示是要访问/static这个文件夹,SharedDataMiddleware对象会直接返回响应;如果不是,则才会调用Flask应用的wsgi_app(environ.start_response)方法继续处理请求。
例子二: 中间件DispatcherMiddleware
中间件DispatcherMiddleware也是werkzeug.wsgi模块中的一个类。这个类可以讲不同的应用“合并”起来。以下是一个使用中间件DispatcherMiddleware的例子。
from flask import Flask
from werkzeug import DispatcherMiddleware
app1
=
Flask
(
__name__
)
app2
=
Flask
(
__name__
)
app
=
Flask
(
__name__
)
@
app1
.
route
(
'/'
)
def index
()
:
return
"This is app1!"
@
app2
.
route
(
'/'
)
def index
()
:
return
"This is app2!"
@
app
.
route
(
'/'
)
def index
()
:
return
"This is app!"
app
=
DispatcherMiddleware
(
app