Flask-Restful:如何发送非json POST参数?

时间:2013-11-11 13:25:36

标签: python flask flask-restful

我在使用POST时使用简单(非json)参数时遇到问题。只是从他们的教程中取出简单的example,我无法进行单元测试,其中任务作为参数传递。然而,任务永远不会传入。它没有。

class TodoList(Resource):
    def __init__(self):
        self.reqparse = reqparse.RequestParser()
        self.reqparse.add_argument('task', type = str)
        super(TodoList, self).__init__()

    def post(self):
        args = self.reqparse.parse_args()
        #args['task'] is None, but why?
        return TODOS[args['task']], 201

单元测试:

def test_task(self):
        rv = self.app.post('todos', data='task=test')
        self.check_content_type(rv.headers)
        resp = json.loads(rv.data)
        eq_(rv.status_code, 201)

我错过了什么?

1 个答案:

答案 0 :(得分:0)

使用'task=test' test_client时,请不要设置application/x-www-form-urlencoded内容类型,因为您将字符串放入输入流。因此,无法检测表单并从表单中读取数据,reqparse将为此案例的任何值返回None

要解决此问题,您必须设置内容类型或使用dict {'task': 'test'}或元组。

对于请求测试更好地使用client = self.app.test_client()代替app = self.app.test_client(),如果您使用FlaskTesting.TestCase类,则只需致电self.client.post