代码之家  ›  专栏  ›  技术社区  ›  KZiovas

烧瓶应用程序请求。get_json()返回(省略号,省略号)而不是json

  •  0
  • KZiovas  · 技术社区  · 3 年前

    我正在构建一个简单的Flask API,我正在测试一个来自Postman的post请求, 这样地 {"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) -> 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 回复  |  直到 3 年前
        1
  •  1
  •   KZiovas    3 年前

    好吧,看来这是一个 邮递员 小故障,尽管我在 Headers 这个 Content-Type: application/json 它没有发送这些信息。

    我删除并开始了一个新的 POST 请求并首先手动添加标题,然后添加 raw 身体数据,所选类型 JSON 它成功了。

        2
  •  0
  •   Jeremy Caney Abloin    2 年前

    试试这个。它肯定会奏效;这对我有用。

    request.get_json(force=True, silent=True, cache=False)
    

    注:仅限设置 cache=false 也为我工作。