Werkzeug ベースのアプリにミドルウェアをセットアップして、JSON のエスケープと操作を行います (特に、Angular ベースの REST クライアントのエスケープ文字列を JSON の前に付けます)。
ロジック全体をミドルウェア レイヤーに保持し、ベース ビュー クラスやベース アプリにトリックを追加したくありません。
私のミドルウェアはコンテンツを操作するので、ヘッダーから Content-Length ヘッダーを取り除きますが、良いネチズンになってクライアントにその情報を提供したいと考えています。
残念ながら、コンテンツを操作した時点で、ヘッダーを調整する方法はもうないようです。パイプラインのさらに下でこれを行う必要がありますか? 2 番目のミドルウェアをラップしますか?
ミドルウェアのコードは次のとおりです。
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