#python #flask #postman
#питон #колба #почтальон
Вопрос:
Я создаю простой API-интерфейс Flask и тестирую почтовый запрос от почтальона, вот так {"name": "Frosty"}
. Это мой класс, который обрабатывает запросы к конечной точке, куда отправляется запрос POST:
from http import HTTPStatus from flask.views import MethodView from flask import Blueprint from injector import singleton, inject from flask import jsonify, abort, request @singleton class PetsController(MethodView): @inject def __init__(self) -gt; None: super().__init__() self.pets = [ {"id": 1, "name": "Snoopy"}, {"id": 2, "name": "Furball"}, {"id": 3, "name": "Alaska"}, ] def configure(self): self.pets_view = Blueprint("pets_view", __name__) self.pets_view.add_url_rule("/pets/", view_func=PetsController.as_view("pets")) def get(self): return jsonify({"pets": self.pets}) def post(self): data = request.get_json() if not data or not "name" in data: return jsonify( message=f"Data missing from POST request {data}", status=HTTPStatus.BAD_REQUEST.value, ) new_pet = {"id": len(self.pets) 1, "name": data["name"]} self.pets.append(new_pet) return jsonify( message=f"new pet added: {new_pet}", status=HTTPStatus.CREATED.value, )
Я получаю неверный ответ на запрос, потому request.get_json()
request.json
что оба объявления возвращают этот кортеж (Ellipsis, Ellipsis)
.
Есть идеи, почему?
Ответ №1:
Хорошо, похоже, это был сбой почтальона, хотя я определил Headers
Content-Type: application/json
, что он не отправлял эту информацию.
Я удалил и запустил новый POST
запрос, сначала вручную добавил заголовок, а затем добавил raw
данные тела, выбрал тип JSON
, и это сработало.
Ответ №2:
Попробуй это. Это, несомненно, сработает; это сработало для меня.
request.get_json(force=True, silent=True, cache=False)
P.S.: Только настройка cache=false
также сработала для меня.