gpt4 book ai didi

django - 如何使用 django rest 框架禁用 HTML 错误页面的返回?

转载 作者:行者123 更新时间:2023-12-03 23:33:55 25 4
gpt4 key购买 nike

如果我在 DRF 的库之外有错误,django 会发回错误的 HTML,而不是 DRF 使用的正确错误响应。

例如:

@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def downloadData(request):
print request.POST['tables']

返回异常 MultiValueDictKeyError: "'tables'" .并取回完整的 HTML。如何仅获取 JSON 错误?

PD:

这是最终的代码:
@api_view(['GET', 'POST'])
def process_exception(request, exception):
# response = json.dumps({'status': status.HTTP_500_INTERNAL_SERVER_ERROR,
# 'message': str(exception)})
# return HttpResponse(response,
# content_type='application/json; charset=utf-8')
return Response({
'error': True,
'content': unicode(exception)},
status=status.HTTP_500_INTERNAL_SERVER_ERROR
)


class ExceptionMiddleware(object):
def process_exception(self, request, exception):
# response = json.dumps({'status': status.HTTP_500_INTERNAL_SERVER_ERROR,
# 'message': str(exception)})
# return HttpResponse(response,
# content_type='application/json; charset=utf-8')
print exception
return process_exception(request, exception)

最佳答案

返回 json 的一种方法是捕获异常并返回正确的响应(假设您使用 JSONParser 作为默认解析器):

from rest_framework.response import Response
from rest_framework import status


@api_view(['POST'])
@permission_classes((IsAuthenticated,))
def downloadData(request):
try:
print request.POST['tables']
except:
return Response({'error': True, 'content': 'Exception!'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

return Response({'error': False})

更新

对于全局明智的用例,正确的想法是将 json 响应放入 exception middleware .

您可以在 this blog post 中找到示例.

在您的情况下,您需要返回 DRF 响应,因此如果引发任何异常,它将最终出现在 process_exception 中。 :
from rest_framework.response import Response


class ExceptionMiddleware(object):

def process_exception(self, request, exception):
return Response({'error': True, 'content': exception}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)

关于django - 如何使用 django rest 框架禁用 HTML 错误页面的返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21100880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com