簡體   English   中英

無論請求的mime類型如何,如何強制flask-restful應用將帖子主體解釋為json

[英]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.pyinfo.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 但是,如何在ResourceInfo訪問此方法以將其提供給myParser

根據flask-restful文檔add_argumentlocation關鍵字參數指示的是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM