return 来自烧瓶中 class 方法的 json 响应

return a json response from a class method in flask

我有一个 class 可以使用几种方法处理数据库中的更改,在每种方法中,我都对数据进行某种验证以检查它是否可以接受,如果不可以return 带有错误和状态代码的 jsonfiy 响应:

class ChangeData():
# more code...
    def change_data(self, new_data):

        if new_data not valid:
            print({"error": "first name can only contain latters"})# will print if not valid
            return jsonify({"error":
                            "can't change the data"}), 400

        else:
            #change the data

我原以为如果数据无效,它会 return 向前端发送 jsonfiy 错误消息,但尽管打印有效,但前端没有收到 jsonfiy 错误,它收到 jsonfiy 成功消息 no重要的是数据是否有效。

@app.route("/change", methods=["POST"])
def change_user_data():

    data = request.form

    update_data = ChangeData()

    new_data = data.get("new_data", None)


    if new_data:
        update_data.change_data(new_data)
    

    return jsonfiy({"sucsees": "the data as been changed"}), 200

我可以解决它的一种方法是,如果数据无效,则通过 change_data 方法 returning False,如果有效,则 True,并且基于return 来自“/change”路线的 jsonfiy,但我不喜欢这个解决方案,提前致谢!

  1. 您的调用代码不期望 return,因此您的错误不是来自函数 return 的 'captured'
if new_data:
        update_data.change_data(new_data)
  1. 即使您的调用代码需要一个 return 值,您也不会在 return 向客户端输出之前检查是否发生了错误。您的代码只是
return jsonfiy({"success": "the data as been changed"}), 200
  1. 一种可能的解决方案是将调用代码放在 try except 块中,并从被调用方引发异常。像这样(这是一个粗略的轮廓,你必须充实它)
class ChangeData():
    def change_data(self, new_data):

        if new_data not valid:
            print({"error": "first name can only contain letters"})
            raise Exception("first name can only contain letters")
@app.route("/change", methods=["POST"])
def change_user_data():

    data = request.form
    update_data = ChangeData()
    new_data = data.get("new_data", None)

    try:
        if new_data:
            update_data.change_data(new_data)
        return jsonfiy({"sucsees": "the data as been changed"}), 200

    except:
        return jsonify({"error": "can't change the data"}), 400