【问题标题】:Return JSON with errorhandler in Python Cloud Function在 Python Cloud Function 中使用错误处理程序返回 JSON
【发布时间】:2019-08-26 09:49:05
【问题描述】:

我将 Python 用于 HTTP 云函数,并希望将默认错误处理程序设置为返回 JSON 而不是 HTML。

from flask_expects_json import expects_json
import payment_orders_schema
from flask import jsonify, Flask

schema = payment_orders_schema.schema

app = Flask(__name__)


@app.errorhandler(400)
def bad_request(error):
    return jsonify({'error': error.description}), 400


@expects_json(schema)
def add_payment_order(request, methods=['POST']):

    request_json = request.get_json(silent=True)

    if request_json:
        return jsonify(request_json), 200

首先,我不确定是否可以在云函数中定义 app 变量,其次,@app.errorhandler 不起作用,云函数返回 HTML。

有什么想法吗?

【问题讨论】:

    标签: python flask google-cloud-platform google-cloud-functions


    【解决方案1】:

    首先,我不确定是否可以在云函数中定义 app 变量

    你不能。尽管 Cloud Functions 使用 Flask 在后台处理请求,但它不支持设置您自己的 Flask WSGI app,就像您在此处所做的那样。

    但是,您可以将其按原样部署到App Engine Standard Python 3.7 Runtime。您可能要考虑这样做。

    【讨论】:

    • 谢谢!这就是我的预期!
    • 嘿达斯汀,我正在重新审视这个,只是想知道.. 为什么 nodejs 运行时允许您操纵 express app 并定义自定义路由,例如 python 运行时不允许?我正在使用 GCF 创建一个宁静的 API,并且想知道处理像 resource/:id/resource2 这样的 url 的最佳方法
    【解决方案2】:

    与其捕获400 错误(即BAD REQUEST 错误),不如尝试捕获404 错误(即NOT FOUND 错误)。我认为这是您真正想要做的,因为404 类型错误是当用户尝试导航到您网站上不存在的页面时收到的。尝试将您的错误处理程序更改为以下内容,看看是否有帮助:

    @app.errorhandler(404)
    def error_404(error):
        return jsonify({'error': error.description}), 404
    

    希望对您有所帮助!

    【讨论】:

      猜你喜欢
      • 2022-06-11
      • 2017-04-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 2018-09-10
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多