我使用Django Rest Framework构建了一个API,但是我遇到了错误记录的问题,它不会显示从AJAX调用发送到API的原始POST数据。现在我知道Rest Framework使用request.DATA来解析POST数据,但是我很难在Django错误日志中获取这些数据,这使得调试实时应用程序变得很困难。
例如,我发送以下POST呼叫:
...
Request Payloadview source
{start:2014-07-16, end:2014-08-18}
end: "2014-08-18"
start: "2014-07-16"
在Django错误日志中,我得到:
...
GET: No GET data
POST: No POST data
FILES: No FILES data
...
如果我能在错误日志中看到哪些数据最初是通过AJAX调用提交的,那就太棒了。 我试图自定义Rest Framework异常处理程序,但它不能捕获Django中发生的500个错误。
答案 0 :(得分:3)
在settings.py中:
REST_FRAMEWORK = {
'EXCEPTION_HANDLER': 'core.exceptions.exception_handler',
}
处理程序:
def exception_handler(exc, drf_request=None):
"""
Replace request.POST with drf_request.DATA so Sentry
can log request properly.
@param exc: Exception
@param drf_request: Request
@return: None
"""
response = views.exception_handler(exc)
if response is None and drf_request is not None \
and drf_request.method not in ['GET', 'HEAD', 'OPTIONS']:
request = get_request()
request.POST = drf_request.DATA
return response
答案 1 :(得分:2)
有一个适用于Django 1.9+和Rest Framework 3.4的版本
from rest_framework import permissions
from rest_framework.views import exception_handler
def custom_exception_handler(exc, context):
response = exception_handler(exc, context)
if response is None and context['request'].method not in permissions.SAFE_METHODS:
context['request']._request.POST = context['request'].data
return response