'TypeError: Object of type 'HttpResponseRedirect' is not JSON serializable
I'm trying to run a simple app which receives a payload from an external application and enters EntryLayerView. This view calls a method in utils.py which then redirects the payload to another view for processing. However, I keep seeing this not Json serializable error.
Url.py
path(
"api/v2/myapp/assessments",
views.EntryLayerView.as_view(),
name="myapp-assessments",
),
path(
"api/v2/myapp/startconversation",
views.startconversation.as_view(),
name="myapp-start-assessment",
),
Views.py The entry point to the app is the EntryLayerView
class EntryLayerView(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
def post(self, request, *args, **kwargs):
body = request.data
response = get_endpoint(validated_body) #Don't worry about this line
return Response(response, status=status.HTTP_200_OK)
class startconversation(generics.GenericAPIView):
permission_classes = (permissions.AllowAny,)
def post(self, request, *args, **kwargs):
print("I'm inside the view")
redirect = request.GET.get('all the data')
#This is the view I'm trying to pass data to
utils.py
def get_endpoint(payload):
qs = '?'+ urlencode(payload)
reverse_url = reverse('myapp-start-assessment')
url = reverse_url + qs
print(url)
return HttpResponseRedirect(url)
The output of url in utils.py is:
/api/v2/myapp/startconversation?contact_uuid=67460e74-02e3-11e8-b443-00163e990bdb&choices=None&value=&cardType=&step=None&optionId=None&path=&title=&description=&message=
Error:
return json.dumps(*args, **kwargs)
File "/usr/local/lib/python3.6/json/__init__.py", line 238, in dumps
**kw).encode(obj)
File "/usr/local/lib/python3.6/json/encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/lib/python3.6/json/encoder.py", line 257, in iterencode
return _iterencode(o, 0)
File "/home/osboxes/ndoh-hub/venv/lib/python3.6/site-packages/rest_framework/utils/encoders.py", line 67, in default
return super().default(obj)
File "/usr/local/lib/python3.6/json/encoder.py", line 180, in default
o.__class__.__name__)
TypeError: Object of type 'HttpResponseRedirect' is not JSON serializable
I'm unable to understand why I'm seeing this JSON not serializable error. It's the same issue if I use JsonResponse or redirect.
Solution 1:[1]
Try to change a little your code:
def get_endpoint(payload):
qs = '?'+ urlencode(payload)
reverse_url = reverse('myapp-start-assessment')
url = reverse_url + qs
print(url)
return url # return url not Response
And then in your EntryLayerView:
def post(self, request, *args, **kwargs):
body = request.data
url = get_endpoint(validated_body) #Don't worry about this line
return HttpResponseRedirect(url)
Also, don't use 2.. codes for redirect, use 3.. instead.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Nikita |
