Промежуточное ПО Django для ловли исключений - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь создать промежуточное программное обеспечение Django, которое проверяет, вызвало ли представление исключение.

Не могли бы вы привести пример того, как может возникнуть исключение и как его обработать с помощью специального промежуточного программного обеспечения.

В конце я хочу сохранить эти исключения в базе данных.

ОБНОВЛЕНИЕ: я пытался добиться этого с помощью процесса входа в систему.Который не работал.

1 Ответ

0 голосов
/ 28 ноября 2018

Ну, вы можете попытаться перехватить любые исключения в промежуточном программном обеспечении, например:

from django.core.urlresolvers import resolve


class SimpleMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        if response.status_code == 500:
            current_url = resolve(request.path_info).view_name
            content = response.contnet
            ExceptionHandlerModel.objects.create(url = current_url,stacktrace = content, ...) # other data you want to store here
        return response

Вот и все, это не будет иметь никакого смысла , если вы не сохраните содержимое из response.content, который полон html .Поэтому я думаю, вам следует избегать этого решения в целом.

Наилучшим подходом было бы использование logger .Например, в вашем loginview вы можете попробовать так:

import logging
logger = logging.getLogger(__name__)

def loginview(request):
    ...
    user = authenticate(username, password)
    if not user:
        logger.error('Username {} failed to login'.format(username))

представление входа в систему также не обязательно вызывает исключение (если только вы не принудительно выбросили их).Например:

class YourAuthException(Exception):
   # defining a custom exception
   pass

# in view
if not user:
   raise YourAuthException("User login failed")

Обновление

def get_user(request)

    user = User.objects.get(id=99999999999)  # an id which does not exist in DB
    return HttpResponse("OK GOT IT")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...