9

ルーティングが発生する前に Flask リクエスト オブジェクトを変更しようとして苦労しています。

私の API モジュール (Flask アプリ全体ではない) は、特別なヘッダーを送信することによる PUT 操作と DELETE 操作の偽造に依存しています。Flask がルーティングを行う前に、"-Method" ヘッダーの内容をチェックアウトし、それに応じて Flask Request オブジェクトを変更する必要があります。

これは、私が作業したい短い、pythonic、明示的なコードです。

@api.before_request
def method_scrubbing():
    if request.headers.has_key('-Method'):
        method = request.headers['-Method'].upper()
        tagalog.log("in before_request, -Method = {}".format(method), 'force')
        if method not in ['PUT', 'DELETE']:
            raise ApiMethodException(method)
        else:
            request.method = method

...しかし、werkzeug から「読み取り専用プロパティ」エラーが発生します: http://drktd.com/74yk

http://flask.pocoo.org/snippets/38/での Armin の投稿のようですが、これはアプリ全体のようです (モジュールに固有のものではありません)。

4

1 に答える 1

8

Werkzeug は、要求が WSGI ミドルウェアでのみ変更されるか、Werkzeug がデータにアクセスする前に変更されると想定しています。その理由は、この方法では Werkzeug が WSGI 環境を監視して、キャッシュを無効にしたり動作を変更したりする必要があるかどうかを確認する必要がないためです。

この特定のケースでは、基礎となる WSGI 環境を慎重に変更することによって成功する可能性があります。

request.environ['REQUEST_METHOD'] = 'something'

その後、request.method「何か」が表示され、動作がフォーム解析に変更されます。私はこれを試したことがなく、うまくいくかどうかわかりません。個人的には、アプリケーション全体の書き換えを行うミドルウェアを作成するか、おそらくその動作に対して単純な URL プレフィックス マッチングを行うミドルウェアを作成します。

于 2011-05-26T20:11:44.547 に答える