मैं django के साथ आंतरिक http सेवाओं से कनेक्ट करना चाहता हूं और मुझे आउटपुट को उन सेवाओं के http प्रतिक्रिया को बफर करना होगा क्योंकि कुछ सामग्री बहुत बड़ी हैं।Iterable ऑब्जेक्ट और Django StreamingHttpResponse
मैं अजगर 3.6, Django 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 /' (या पोस्टमैन या ...) आउटपुट प्रदान करें। –