Как я могу ссылаться на пользователя глобально в Django для всех исключений? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть два вопроса, которые коррелируют.

1) Есть ли у django -rest-framework возможность ссылаться на пользователя глобально?

2) Есть ли django / python позвольте мне изменить общий класс исключений c для включения этого идентификатора пользователя в качестве мета каждый раз, когда он выдает?

Я знаю, что могу создавать собственные классы исключений и вызывать их в коде, но как насчет исключения, которое я не правильно обрабатывать? Например, допустим, исключение делится на ноль, но я неправильно его обработал, сейчас мои журналы просто говорят «Делить на ноль исключений». Есть ли способ обновить это глобально, чтобы, если пользователь вошел в систему, было написано «Делить на ноль исключений для user_id {id}«?

class SomeExternalApiHelper:
    @staticmethod
    def do_api_call():
        url = 'https://example.com'
        # do api request
        try:
            home_value = 100 / 0
        except Exception as e:
            # Exception occurs here, I want to be able to reference user_id, without having
            # to pass the user_object all the way down into this call
            raise Exception("Something went wrong for user ID {0}".format(user_id))


class AddNewHouse(APIView):
    def post(self, request, format=None):
        # I can call request.user here and access the user object
        SomeExternalApiHelper.do_api_call()


1 Ответ

0 голосов
/ 26 марта 2020

Вы можете создать пользовательское промежуточное ПО , которое перехватывает все исключения, затем вы можете зарегистрировать исключение вместе с пользователем

def exception_middleware(get_response):

    def middleware(request):
        try:
            response = get_response(request)
        except Exception as e:
            # You now have the exception and request.user and can log how you like
            raise
    return response

return middleware
...