亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Flask 錯誤處理程序未正確處理 marshmallow ValidationError

Flask 錯誤處理程序未正確處理 marshmallow ValidationError

慕絲7291255 2024-01-15 21:12:00
我不知道這是否重要,但我實際上正在使用flask-restplus擴展。我的所有其他燒瓶錯誤處理程序都按預期工作,但由于某種原因,在處理 a 時marshmallow ValidationError,響應只是我的原始請求正文,而不是棉花糖錯誤消息。我已經做了一些調試,我知道正在調用錯誤處理程序,并且 的屬性ValidationError是可訪問的(例如,已驗證 is error.messages){'age': ['Missing data for required field.']}。有誰之前經歷過這個嗎?感謝您的閱讀,并提前感謝您的幫助!有效負載:{"name": "Bob"}錯誤處理程序:from marshmallow.exceptions import [email protected](ValidationError)def marshmallow_error_handler(error):    # print(error.messages) results in expected {'age': ['Missing data for required field.']}    return error.messages, 400架構:class SimpleSchema(Schema):    name = fields.String(required=True)    age = fields.String(required=True)測試處理程序的簡單路線:@api.route("/test")class MarshmallowTest(Resource):    def post(self):        SimpleSchema().load(api.payload)預期回應:{'age': ['Missing data for required field.']}實際響應:{"name": "Bob"}我已經能夠通過重寫 的函數并引發自定義異常來解決這個問題marshmallow.Schema,handle_error但我仍然很好奇是什么導致了這種行為!
查看完整描述

2 回答

?
猛跑小豬

TA貢獻1858條經驗 獲得超8個贊

我也遇到了這個錯誤,并發現了這個 Github 問題https://github.com/noirbizarre/flask-restplus/issues/530

我采用的解決方法是data在我自己的處理程序中覆蓋異常的屬性

    @api.errorhandler(Exception)

    def handle_unexpected_within_restx(e):

        app.logger.exception(e)

        

        data = compose_error_response(e.messages)

        # https://github.com/noirbizarre/flask-restplus/issues/530

        e.data = data

        return data, 400


查看完整回答
反對 回復 2024-01-15
?
撒科打諢

TA貢獻1934條經驗 獲得超2個贊

我認為傳統的方法是返回帶有“message”屬性的字典。就我而言,我將“消息”中的所有數據作為字符串


from flask import Flask, json

from marshmallow.exceptions import ValidationError


app = Flask(__name__)


@app.errorhandler(ValidationError)

def register_validation_error(error):

  rv = dict({'message': json.dumps(error.messages)})

  return rv, 422


查看完整回答
反對 回復 2024-01-15
  • 2 回答
  • 0 關注
  • 247 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號