TypeError: Объект типа 'HttpResponseRedirect' не является JSON сериализуемым
Я пытаюсь запустить простое приложение, которое получает полезную нагрузку от внешнего приложения и входит в EntryLayerView. Это представление вызывает метод в utils.py, который затем перенаправляет полезную нагрузку в другое представление для обработки. Однако я продолжаю видеть эту ошибку not Json serializable.
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 Точкой входа в приложение является 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)
Вывод url в utils.py следующий:
/api/v2/myapp/startconversation?contact_uuid=67460e74-02e3-11e8-b443-00163e990bdb&choices=None&value=&cardType=&step=None&optionId=None&path=&title=&description=&message=
Ошибка:
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
Я не могу понять, почему я вижу эту ошибку JSON not serializable. Это та же проблема, если я использую JsonResponse или redirect.
Попробуйте немного изменить ваш код:
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
И затем в вашем EntryLayerView:
def post(self, request, *args, **kwargs):
body = request.data
url = get_endpoint(validated_body) #Don't worry about this line
return HttpResponseRedirect(url)
Также не используйте 2... коды для перенаправления, вместо них используйте 3...