Python Flask-Restful POST не принимает аргументы JSON
я очень новичок в колбе (&Flask-Restful).
моя проблема : json
параметры POST
устанавливается в NONE
(не работает).
я могу взять аргументы из form-data
, используя POSTMAN
плагин для chrome. Но, когда я переключаюсь на raw
(&feed a json
), он не может прочитать json и назначает NONE
на все мои доводы.
я прочитал некоторые связанные сообщения stackoverflow, связанные с этим:link1 и, link2, link3 ... ничего из этого мне не помогло.
я использую python-2.6
, Flask-Restful-0.3.3
, Flask-0.10.1
, Chrome
, POSTMAN
на Oracle Linux 6.5.
код app.py
:
from flask import Flask, jsonify
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
parser = reqparse.RequestParser()
parser.add_argument('username', type=str)
parser.add_argument('password', type=str)
class HelloWorld(Resource):
def post(self):
args = parser.parse_args()
un = str(args['username'])
pw = str(args['password'])
return jsonify(u=un, p=pw)
api.add_resource(HelloWorld, '/testing')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5444 ,debug=True)
тестирование это используя POSTMAN
:
- используя
form-data
: работает отлично ! - используя
raw
->json
: причины этого выпуск
вещи пробовали #1 :
добавить json
параметр my add_argument()
метод app.py
parser = reqparse.RequestParser()
parser.add_argument('username', type=str, location='json') # added json
parser.add_argument('password', type=str, location='json') # added json
Input
: {"username": "hello", "password":" world"}
Output
: {"p": "None", "u": "None"}
вещи пробовали #2 :
изменить тип на unicode
на add_argument()
метод app.py
parser = reqparse.RequestParser()
parser.add_argument('username', type=unicode, location='json') # change type to unicode
parser.add_argument('password', type=unicode, location='json') # change type to unicode
Input
: { "имя пользователя": "привет", "пароль": "мир" }
Output
: {"p": "None", "u": "None"}
PS: Я буду продолжать обновлять свой вопрос с каждой неудачной попыткой. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация, чтобы сделать этот вопрос более ясным.
2 ответов
согласно документации для запрос.в JSON и новая запрос.get_json, вы должны иметь фильтр на ваш запрос POST для application/json
. Это единственный способ, которым flask автоматически проанализирует ваши данные JSON в Request.json
свойство, которое (я считаю) является тем, от чего зависит Flask-Restful для получения данных JSON.
Примечание: более новый get_json
функция имеет возможность принудительно анализировать данные POST как JSON независимо от mimetype
get_json похоже, трюк удался.
from flask import Flask, jsonify, request
from flask_restful import reqparse, abort, Api, Resource
app = Flask(__name__)
api = Api(app)
#parser = reqparse.RequestParser()
#parser.add_argument('username', type=unicode, location='json')
#parser.add_argument('password', type=unicode, location='json')
class HelloWorld(Resource):
def post(self):
json_data = request.get_json(force=True)
un = json_data['username']
pw = json_data['password']
#args = parser.parse_args()
#un = str(args['username'])
#pw = str(args['password'])
return jsonify(u=un, p=pw)
api.add_resource(HelloWorld, '/testing')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5444 ,debug=True)