1. 程式人生 > >Flask用reqparse實現post方法時,parser.parse_args()的值為None的解決辦法

Flask用reqparse實現post方法時,parser.parse_args()的值為None的解決辦法

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