【问题标题】:Give Flask error handler access to request授予 Flask 错误处理程序访问请求的权限
【发布时间】:2016-03-11 19:32:56
【问题描述】:

我正在尝试在 Flask 中创建一个自定义错误页面,我想让错误处理程序访问生成导致错误的 API 调用的请求,以便它返回的错误页面可以更改取决于情况。例如,假设有两个端点:

(1)@app.route('/get_item')

(2)@app.route('/submit_item')

如果在调用get_item 期间发生错误,我想显示某个错误页面(“抱歉,发生错误...”)但是,如果在调用submit_item 期间发生错误,我希望它说一些更丰富的信息,例如:

“发生错误!请联系我们。

您的用户名:request.json['userid']

您的提交 id:request.json['submission']"

是否可以允许错误处理程序访问它,还是我只需将整个 submit_item 包装在 try/except 语句中?

【问题讨论】:

    标签: python error-handling flask


    【解决方案1】:

    您可以在错误处理函数中使用request 上下文, 类似的东西:

    from flask import request
    
    def exception_handler(*args):
        if request.url.endswith('submit_item'):
           return "MyMoreDescriptiveErrorMessage", 500
        else:
           return "Something wrong happened", 500
    

    【讨论】:

      【解决方案2】:

      我可能会创建一个自定义异常并为其指定一个类似于this example 的错误处理程序。

      class CustomException(Exception):
      
          def __init__(self, message=None, status_code=None, payload=None):
              Exception.__init__(self)
      
              if message is None:
                  message = "Sorry, an error occurred..."
      
              self.message = message
      
              if status_code is not None:
                  self.status_code = status_code
              self.payload = payload
      
      
      @app.errorhandler(CustomException)
      def handle_custom(error):
          response = render_template('error.html', message=error.message)
          response.status_code = error.status_code
          return response
      
      @app.route('/submit_item')
      def submit_item():
           message = "An error occured! Userid: %(userid)d, submission: %(submission_id)d"
           message = message % (request.json)
      
           raise CustomException(message)
      

      【讨论】:

        猜你喜欢
        • 2020-02-02
        • 2021-07-12
        • 2015-07-24
        • 2018-12-20
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多