1

我有一个用 Flask 制作的 REST API,我想接受 POST 请求,但只有那些来自与运行 API 本身的同一台机器制作的请求。

我试图为此编写一个测试。在浏览了 Flask 和 Werkzeug 文档后,我想到了:

def test_external_post_fails(self):

    my_data = {
        ...
    }

    result = self.client.post('/my_uri', 
                    data=my_data
                    environ_overrides={'remote_addr': '127.0.0.2'})
    assert result.status_code == 401

但是,在我的 Flask 视图函数中编写了一些相应的代码后,我认为我没有达到我希望的测试结果。这是代码:

if request.environ.get('REMOTE_ADDR', '127.0.0.1') != '127.0.0.1':
    abort(401)
post_data = request.form
DPC.store(post_data)
return jsonify(post_data), 201

当我运行测试时,它会得到正常的 201 Created 响应。所以我认为我没有以正确的方式对此进行测试。总之,我需要修改请求环境。我尝试使用environ_overrides关键字参数做的事情,实际上只是我在浏览了 Flask 客户端的 API 后所做的猜测。

有谁知道这样做的规范方法?提前致谢。

4

1 回答 1

2

As discovered in comments above, the environ_overrides dictionary is case-sensitive. remote_addr needs to be capitalized, like so:

environ_overrides={'REMOTE_ADDR': '127.0.0.2'})
于 2013-11-01T04:13:02.073 回答