我正在尝试创建一个Django中间件,用于检查视图是否引发异常。
您能否举例说明如何发生异常以及如何通过自定义中间件处理异常。
最后,我想将这些异常存储在数据库中。
更新: 我试图通过登录过程来实现。哪个没有用。
答案 0 :(得分:1)
好吧,您可以尝试捕获中间件中的任何异常,如下所示:
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")