0

我有一个来自 werkzeug 的请求对象。我想更改此请求对象的值。这是不可能的,因为 werkzeug 请求对象是不可变的。我理解这个设计决定,但我需要更改一个值。我该怎么做呢?

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

我尝试做 a 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 回答