Нашему приложению, разработанному в Django, необходимо передавать некоторые дополнительные заголовки ответа в определенных запросах.
Мы делаем это следующим образом:
def update(self, request, *args, **kwargs):
original_response = Response(status=status.HTTP_204_NO_CONTENT)
original_response['X-Status-Type'] = 'info'
original_response['X-Status-Message'] = 'Il cliente è stato avvertito'
return original_response
В нашем методе. Однако, хотя это работает в нашей локальной настройке, на heroku это генерирует ошибку 500, которую мы не можем понять.
Я создал простой метод обновления следующим образом:
def update(self, request, *args, **kwargs):
try:
original_response = Response(status=status.HTTP_204_NO_CONTENT)
original_response['X-Status-Type'] = 'info'
original_response['X-Status-Message'] = 'Il cliente è stato avvertito'
logger.info(original_response)
return original_response
except Exception as e:
logger.error(e)
logger.info('INSIDE CATCH')
return Response(status=status.HTTP_204_NO_CONTENT)
With в этом случае вызов PATCH возвращает 500 (внутренняя ошибка сервера ...). Вместо этого с помощью этого метода:
def update(self, request, *args, **kwargs):
try:
original_response = Response(status=status.HTTP_204_NO_CONTENT)
logger.info(original_response)
return original_response
except Exception as e:
logger.error(e)
logger.info('INSIDE CATCH')
return Response(status=status.HTTP_204_NO_CONTENT)
в результате я получил 204.
Кажется, что ответ задерживается на маршрутизаторе heroku, и 500 генерируется там, что может быть замеченным этим не- django ответом даже в режиме отладки:
HTTP/1.1 500 Internal Server Error
Server: Cowboy
Date: Thu, 18 Jun 2020 13:07:55 GMT
Connection: close
Content-Type: text/html
Content-Length: 141
Via: 1.1 vegur
<html>
<head>
<title>Internal Server Error</title>
</head>
<body>
<h1><p>Internal Server Error</p></h1>
</body>
</html>