У меня есть код в приложении Flask, которое использует JSON в запросе, и я могу получить объект JSON следующим образом:
Request = request.get_json()
Это работает нормально, однако я пытаюсь создать модульные тесты с использованием модуля Python unittest, и мне трудно найти способ отправить JSON с запросом.
response=self.app.post('/test_function',
data=json.dumps(dict(foo = 'bar')))
Это дает мне:
>>> request.get_data()
'{"foo": "bar"}'
>>> request.get_json()
None
Кажется, у Flask есть аргумент JSON, в котором вы можете установить json = dict (foo = 'bar') в почтовом запросе, но я не знаю, как это сделать с модулем unittest.
python
json
flask
python-unittest
Сепер Назари
источник
источник
request.data
содержит? Часто, когда синтаксический анализ json завершается неудачно из-за неправильного ввода, он завершается сбоем и возвращает,None
таким образом, необработанные входные данные могут быть не json.Ответы:
Изменение сообщения на
response=self.app.post('/test_function', data=json.dumps(dict(foo='bar')), content_type='application/json')
починил это.
Спасибо user3012759.
источник
application/json
тип контента.post
запрос, например,resp = client.post('/my/endpoint/',json=my_json_data)
вы можете получить доступ к данным в виде байтов с помощьюresp.data
.ОБНОВЛЕНИЕ: поскольку выпущенные
flask.testing.FlaskClient
методы Flask 1.0 принимаютjson
аргумент иResponse.get_json
добавленный метод, см. Пример .для Flask 0.x вы можете использовать квитанцию ниже:
from flask import Flask, Response as BaseResponse, json from flask.testing import FlaskClient from werkzeug.utils import cached_property class Response(BaseResponse): @cached_property def json(self): return json.loads(self.data) class TestClient(FlaskClient): def open(self, *args, **kwargs): if 'json' in kwargs: kwargs['data'] = json.dumps(kwargs.pop('json')) kwargs['content_type'] = 'application/json' return super(TestClient, self).open(*args, **kwargs) app = Flask(__name__) app.response_class = Response app.test_client_class = TestClient app.testing = True
источник
dict
строкой JSON!