Вернуть JSON с обработчиком ошибок в облачной функции Python - PullRequest
2 голосов
/ 04 апреля 2019

Я использую 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

Во-первых, я не уверен, что могу определить *Переменная 1004 * в облачной функции и, во-вторых, @app.errorhandler не работает, облачные функции возвращают HTML.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

Вместо перехвата ошибки 400, которая является ошибкой BAD REQUEST, возможно, вы можете попытаться перехватить ошибку 404, которая является ошибкой NOT FOUND.Я думаю, это то, что вы действительно хотите сделать, так как ошибка типа 404 - это то, что получается, когда пользователь пытается перейти на страницу на вашем сайте, которая не существует.Попробуйте изменить свой обработчик ошибок на следующий и посмотрите, поможет ли это:

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

Надеюсь, это поможет!

0 голосов
/ 04 апреля 2019

Во-первых, я не уверен, что могу определить переменную app в облачной функции

Ты не можешь. Хотя Cloud Functions использует Flask для обслуживания запросов изнутри, он не поддерживает настройку вашего собственного Flask WSGI app, как вы делаете здесь.

Однако вы сможете развернуть это как есть на Стандартном App Engine Python 3.7 Runtime . Возможно, вы захотите сделать это вместо этого.

...