ВОПРОС
Все маршруты моего приложения определяются с помощью ресурсов, сохраняемых во флаконах.Как найти объект / класс ресурса, который обрабатывает текущий запрос?
ПОЧЕМУ Я ХОЧУ ЭТО
Я хотел записать все исключения, возникшие при обработке запросов.Я подключаюсь к flask.got_request_exception
, как описано в http://flask.pocoo.org/docs/1.0/api/#signals, и что-то вроде этого работает хорошо:
from flask import got_request_exception, request
def log_exception(sender, exception, **extra):
logger.info("URL: {}, Exception: {}".format(request.url, type(exception).__name__))
got_request_exception.connect(log_exception, app)
Единственная проблема заключается в том, что я хочу записать некоторые данные запроса, но не вседанные - например, я хотел бы скрыть пароли.Я думаю, что было бы неплохо иметь логику регистрации данных вместе с логикой обработки запросов, например:
from flask import request
import flask_restful
class SomeResource(flask_restful.Resource):
def get(self):
# ... GET processing
def log_data(self):
# log all body params
return request.get_json()
class Login(flask_restful.Resource):
def post(self):
# ... authentication
def log_data(self):
# log selected body params
return {'login': request.get_json()['login'], 'password': 'HIDDEN!'}
и использовать ее в моем log_exception
:
from flask import got_request_exception, request
def log_exception(sender, exception, **extra):
resource_class = # THIS IS THE THING I'M MISSING
logger.info("URL: {}, Exception: {}, Data: {}".format(request.url, type(exception).__name__),
resource_class.log_data())
got_request_exception.connect(log_exception, app)
Но может быть, это нужно сделать по-другому?