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 方法的调用:
>

http://127.0.0.1:5000/p?name=helo&&age=16

post 方法的调用
>

http://127.0.0.1:5000/p

参数:
{
“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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值