0

werkzeug からのリクエスト オブジェクトがあります。このリクエスト オブジェクトの値を変更したいと考えています。werkzeug リクエスト オブジェクトは不変であるため、これは不可能です。この設計上の決定は理解していますが、値を変更する必要があります。どうすればいいですか?

>>> request
<Request 'http://localhost:5000/new' [POST]>
>>> request.method
'POST'
>>> request.method = 'GET'
*** AttributeError: read only property

をやってみましたdeepcopyが、結果のコピーも不変です。独自のモック オブジェクトを作成して手動で値を入力することもできると思いますが、それが私の最後の手段です。より良い方法はありますか?

4

1 に答える 1

0

これは私が思いついたものです:

def make_duplicate_request(request):
    """
    Since werkzeug request objects are immutable, this is needed to create an
    identical request object with mutable values
    """
    class Req(object):
        method = 'GET'
        path = ''
        headers = []
        args = []
    r = Req()
    r.path = request.path
    r.headers = request.headers
    r.is_xhr = request.is_xhr
    r.args = request.args
    return r

おそらく最もエレガントなソリューションではありませんが、機能します。

于 2012-12-09T18:29:59.997 に答える