我在基于 Werkzeug 的应用程序中设置了一个中间件,为我做一些 JSON 转义和操作(特别是为基于 Angular 的 REST 客户端在 JSON 前面加上转义字符串)。
我想将整个逻辑保留在中间件层中,并且不向我的基本视图类或基本应用程序添加任何技巧。
因为我的中间件操纵内容,所以我从标头中剥离了 Content-Length 标头,但我想成为一名优秀的网民并为客户端提供该信息。
不幸的是,在我操纵内容的时候,似乎没有办法再调整标题了。我是否必须在管道中进一步执行此操作?在它周围包裹第二个中间件?
这是中间件的代码:
class ContentManipulatingMiddle(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
app = self.app
def start_unpack_data(status, response_headers, exc_info=None):
# we need to strip content-length
response_headers = [ (name, value)
for name, value in response_headers
if name.lower() != 'content-length' ]
return start_response(status, response_headers, exc_info)
app_iter = app(environ, start_unpack_data)
data = []
for item in app_iter:
# do some content manipulation
data.append(manipulate_content(item))
# content length has changed, i should reset the content-length header
# but at this point, how?
return data