Dan*_*nae 6 django middleware exception
我正在尝试创建一个 Django 中间件来检查视图是否引发异常。
您能否举一些例子来说明如何出现异常以及如何通过自定义中间件处理该异常。
最后我想将这些异常存储在数据库中。
更新:我试图通过登录过程来实现这一点。这没有用。
好吧,您可以尝试捕获中间件中的任何异常,如下所示:
from django.core.urlresolvers import resolve
class SimpleMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
response = self.get_response(request)
if response.status_code == 500:
current_url = resolve(request.path_info).view_name
content = response.content
ExceptionHandlerModel.objects.create(url = current_url,stacktrace = content, ...) # other data you want to store here
return response
Run Code Online (Sandbox Code Playgroud)
就是这样,除非您存储充满html的内容,否则它没有任何意义。所以我认为你应该完全避免这个解决方案。response.content
最好的方法是使用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))
Run Code Online (Sandbox Code Playgroud)
登录视图也不一定会抛出异常(除非您强制抛出异常)。例如:
class YourAuthException(Exception):
# defining a custom exception
pass
# in view
if not user:
raise YourAuthException("User login failed")
Run Code Online (Sandbox Code Playgroud)
def get_user(request)
user = User.objects.get(id=99999999999) # an id which does not exist in DB
return HttpResponse("OK GOT IT")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4865 次 |
| 最近记录: |