I try to build API with Django rest framework
And I got Object of
type 'TypeError' is not JSON serializable
What should I do to fix?
Here's my view.py
class NewsViewSet(viewsets.ModelViewSet):
queryset = News.objects.all()
serializer_class = NewsSerializer
def list(self, request, **kwargs):
try:
nba = query_nba_by_args(**request.query_params)
serializer = NewsSerializer(nba['items'], many=True)
result = dict()
result['data'] = serializer.data
result['draw'] = nba['draw']
result['recordsTotal'] = nba['total']
result['recordsFiltered'] = nba['count']
return Response(result, status=status.HTTP_200_OK, template_name=None, content_type=None)
except Exception as e:
return Response(e, status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)
Django cannot convert Exception object to JSON format and raise error. To fix it you should convert error to string and pass result to response:
except Exception as e:
return Response(str(e), status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)
first
import json
from django.http import HttpResponse
Change line
return Response(result, status=status.HTTP_200_OK, template_name=None, content_type=None)
for this
return HttpResponse(json.dumps(result),content_type="application/json")
or use
from django.http import JsonResponse
return JsonResponse(json.dumps(result))
Python exceptions are not json serializable. It's failing in try
because of some connection or content unavailable issue, then going into except
block where you are passing exception e
as it is to Response()
so that is creating the issue. Solution - check the URL and also in except block convert exception e
to string and pass to Response(str(e), status=status.HTTP_404_NOT_FOUND, template_name=None, content_type=None)
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.