Flask用reqparse實現post方法時,parser.parse_args()的值為None的解決辦法
阿新 • • 發佈:2019-01-01
Flask—restful 的restful API實現
from flask import Flask from flask_restful import Api, Resource, reqparse parser = reqparse.RequestParser(trim=True) parser.add_argument('name', location=['json', 'args']) parser.add_argument('name', location=['json', 'args'],type=dict)#可以接收復合型的json引數 parser2 = reqparse.RequestParser() parser2.add_argument('age', location=['json', 'args']) app = Flask(__name__) api = Api(app) class HelloWorld(Resource): def get(self): args = parser.parse_args() args2 = parser2.parse_args() print args['name'] return {'name': args['name'], 'age': args2['age']} def post(self): args = parser.parse_args() args2 = parser2.parse_args() print args['name'] return {'name': args['name'], 'age': args2['age']} api.add_resource(HelloWorld, '/p') if __name__ == '__main__': app.run(debug=True)
get 方法的呼叫:
>
post 方法的呼叫:
>
引數:
{
“name”:”wangjing”,
“age”:”18”
}
header:
Content-Type: application/json
記錄Flask—restful API 的一個坑:
第一次用parser.add_argument(‘name’)來定義request引數,post方法呼叫時:args = parser.parse_args(),獲得的值為None
WFlask_restful原始碼中location的定義:
_friendly_location = { u'json': u'the JSON body', u'form': u'the post body', u'args': u'the query string', u'values': u'the post body or the query string', u'headers': u'the HTTP headers', u'cookies': u'the request\'s cookies', u'files': u'an uploaded file', }
所以為了讓定義的parser引數能同時支援get和post方法,location必須定義為:
location=[‘json’, ‘args’],不然的話,args = parser.parse_args()獲取值的時候,args會為None