请求中缺少表单数据

时间:2016-04-29 11:03:13

标签: python-2.7 post flask request

我有以下代码

class MyClass(restful.Resource):

    def get(self):
        headers = {'Content-Type': 'text/html'}
        return make_response(render_template('myfile.html'),200,headers)

    def post(self):
            session['CONSUMER_KEY']=request.form.get('consumer_key')
            session['CONSUMER_SECRET']=request.form.get('consumer_secret')
            render_template('myfile.html')

api.add_resource(MyClass,"/mag/",endpoint="mag")

我写了以下测试:

   def mytest(self):
        content_type={"Content-Type": "application / x - www - form - urlencoded","Content-Disposition": "form-data"}
        response = self.client.post(
            api.url_for(MyClass), data = json.dumps({'consumer_key':'testconsumerkey',
                        'consumer_secret':'testconsumersecret'}),
            headers=content_type
        )

问题是表单数据是空白的,即未在会话中设置值。当我调试时,我看到request.data已填充,但request.form是一个空字典。有人可以建议我如何在测试的帖子请求中发送表单数据

编辑:环境细节 Python 2.7,Flask Web框架,self.client是。我正在使用flask.ext.testing

1 个答案:

答案 0 :(得分:4)

您似乎对帖子正文的预期格式应该是多么困惑。它应该是JSON数据(这是您在测试用例中发送的),还是应该是application/x-www-form-urlencoded格式(您声称在测试用例中发送的是什么,以及端点将读取的内容)?

如果您希望接收JSON数据,则需要更改端点以从request.get_json()读取数据。您还需要在测试用例中使用application/json作为Content-Type标头。

如果您希望接收urlencoded的发布数据,那么只需删除Content-Type标头和json.dumps即可简化测试用例。只需将数据dict传递给data参数。