django를 사용하여 내부 http 서비스에 연결하고 일부 내용이 매우 크기 때문에 해당 서비스의 http 응답을 버퍼링해야합니다.Iterable 객체와 Django StreamingHttpResponse
내가 파이썬 3.6, 장고 2.0,http.client
를 사용하고
다음과 같은 코드 :
class HTTPStreamIterAndClose():
def __init__(self, conn, res, buffsize):
self.conn = conn
self.res = res
self.buffsize = buffsize
self.length = 1
bytes_length = int(res.getheader('Content-Length'))
if buffsize < bytes_length:
self.length = math.ceil(bytes_length/buffsize)
def __iter__(self):
return self
def __next__(self):
buff = self.res.read(self.buffsize)
if buff is b'':
self.res.close()
self.conn.close()
raise StopIteration
else:
return buff
def __len__(self):
return self.length
def passthru_http_service(request, server, timeout, path):
serv = HTTPService(server, timeout)
res = serv.request(path)
response = StreamingHttpResponse(
HTTPStreamIterAndClose(serv.connection, res, 200),
content_type='application/json'
)
response['Content-Length'] = res.getheader('Content-Length')
return response
그리고 리스폰스, 내가 가진 반복자 테스트 비어 :
b''.join(HTTPStreamIterAndClose(serv.connection, res, 200)
을 그리고 모든 것이 잘 작동, 나는 왜 일하지 않는지 모른다.
브라우저 콘솔에 오류가 있습니까? – xyres
아니요, 오류가 없습니다 –
"작동하지 않는다"는 것을 의미합니까? 당신은 http 500를 얻는가? 200 빈 출력? 질문에'curl -v http : // localhost : 8000/x/y /'(또는 Postman 또는 ...) 출력을 제공하십시오. –