更改werkzeug请求对象的值

时间:2012-12-09 03:54:57

标签: python immutability werkzeug

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

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

我尝试了deepcopy,但生成的副本也是不可变的。我想我可以创建自己的模拟对象并手动填写值,但这是我最后的解决方案。还有更好的方法吗?

1 个答案:

答案 0 :(得分: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

也许没有最优雅的解决方案,但它确实有效。