"Accept"HTTP 헤더의 해석 및 응답의 직렬화를 처리하기 위해 사용자 지정 CherryPy "도구"를 사용하지 않는 다중 표현 (미디어 유형)Content-Type을 변경 한 후 반환 된 콘텐츠가 자동으로 인코딩되지 않음
ValueError: Page handlers MUST return bytes. Use tools.encode if you wish to return unicode.
예 :
contentType = tools.accept.callable(media = ['application/json', 'text/html'])
if contentType == 'application/json':
return json.dumps(studies)
elif contentType == 'text/html':
...
엔터티 본문은 CherryPy하지만 특정 미디어 유형에 대해 적절하게 "콘텐츠 유형"HTTP 헤더를 설정 한 후 페이지 처리기에서 콘텐츠를 반환시 다음
ValueError
예외가 발생
JSON 표현이 HTML (기본값)으로 잘못 선언되지만이 방법은 두 미디어 유형 모두에서 작동합니다.
contentType = tools.accept.callable(media = ['application/json', 'text/html'])
response.headers['Content-Type'] = "{mediaType}; charset=utf-8".format(mediaType = contentType)
if contentType == 'application/json':
return json.dumps(studies)
elif contentType == 'text/html':
...
여기서 JSON 콘텐츠를 문자열로 반환 할 때 예외가 발생합니다.
실제로는 tools.encode
을 사용하려는 시도가 실제로 활성화되어 있으며 tools.encode.encoding
에서 utf-8
으로 명시 적으로 설정하면 실패합니다. HTML 표현에 대해서는 문제가 없으므로 JSON 표현에서도 작동해야하는 것처럼 보입니다.
현재 tools.encode
에 대한 문서는 다소 희박한 것으로 보이므로 취할 수있는 최선의 방법은 즉시 명백하지 않습니다.
이 정답 표시 사항 : 본 이유
이 특정 상황에서이 문제를 해결하는 가장 적절한 방법은 수동으로 컨텐츠를 인코딩하는 것입니다. 추신 언제든지 풀 요청을 제안 해 주시기 바랍니다 :) – webKnjaZ@webKnjaZ 감사합니다. 가장 유용한 PR은 아마도 문서 교정 일 뿐이므로,이 기고가 (이 시나리오에서 다른 누군가가 놀라는 경우 쉽게 찾을 수 있기를 바랍니다)보다 더 기여하지 않을까 우려됩니다. 지금은 어쨌든 ;-). – tne
어쨌든, 저는이 문제에 대한 언급을 여기에 추가했습니다 – webKnjaZ