我有以下代码
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
答案 0 :(得分:4)
您似乎对帖子正文的预期格式应该是多么困惑。它应该是JSON数据(这是您在测试用例中发送的),还是应该是application/x-www-form-urlencoded
格式(您声称在测试用例中发送的是什么,以及端点将读取的内容)?
如果您希望接收JSON数据,则需要更改端点以从request.get_json()
读取数据。您还需要在测试用例中使用application/json
作为Content-Type标头。
如果您希望接收urlencoded的发布数据,那么只需删除Content-Type标头和json.dumps
即可简化测试用例。只需将数据dict传递给data
参数。