[英]Get POST request body as JSON of array as root node in flask-restful
[英]How to force a flask-restful app to interpret the post body as json regardsless of the request's mime-type
我有一個python flask-restful
應用,該應用在帖子正文中接收json。 這是兩個最小文件app.py
和info.py
:
應用程序模塊app.py
:
from flask import Flask
from flask_restful import Resource, Api, reqparse
flaskApp = Flask(__name__)
api = Api(flaskApp)
from endpoints.info import Info
api.add_resource(Infp, '/v1/info')
端點模塊info.py
(在子文件夾endpoints
):
from flask_restful import Resource, reqparse
myParser = reqparse.RequestParser()
reqparse.RequestParser.
myParser.add_argument('argA', location='json')
myParser.add_argument('argB', location='json')
class Info(Resource):
def post(self):
args = myParser.parse_args()
return args
當我以mime類型application/json
發送請求時,此應用程序可以正常運行:
curl -s "http://127.0.0.1:5000/v1/info" -d '{"locality":"Barton"}' -H Content-Type:application/json
返回預期:
{
"locality": "Barton"
}
但是,客戶端將以普通的url編碼的mimetype發送請求 。 當我剛做
curl -s "http://127.0.0.1:5000/v1/info" -d '{"locality":"Barton"}'
該應用返回{}
因此它沒有按預期解釋主體。
無論請求的mime類型如何,我如何強制應用程序將帖子主體解釋為json?
我知道這個StackOverflow問題 ; 它建議使用Request.get_json
。 但是,如何在Resource
類Info
訪問此方法以將其提供給myParser
?
根據flask-restful文檔 , add_argument
的location
關鍵字參數指示的是flask.Request
的屬性,從該屬性中提取參數。
根據Flask文檔 ,如果請求的mimetype不是application/json
,則json
屬性將為空。
但是,如果直接使用Request.get_json(force=True)
,則不需要解析器。 您可以訪問以下值:
from flask import request
class Info(Resource):
def post(self):
data = request.get_json(force=True)
return data['locality']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.