如何使用Django从用户请求触发的外部API中获取数据,并在请求周期内直接将其流回,而无需(或使用渐进式/最小化)内存使用?
背景
作为连接外部托管的微服务的短期解决方案,需要将用户的可访问性(基于Django应用程序的身份验证系统)限制为未经身份验证的API。以前的开发人员使用Javascript公开了这些外部IP,我们需要一种解决方案以使其不受公众欢迎。
要求
这可能吗?如果是这样,您能建议一种方法吗?
from django.shortcuts import Http404, HttpResponse
import requests
def api_gateway_portal(request, path=''):
# Determine whether to grant access
# If so, fetch and return data
r = requests.get('http://some.ip.address/%s?api_key=12345678901234567890' % (path,))
# Return as JSON
response = HttpResponse(r.content, content_type='application/json')
response['Content-Length'] = len(r.content)
return response
请注意-我完全知道这是一个糟糕的长期解决方案,但是对于演示目的来说是短期必需的,直到新的外部身份验证系统完成为止。
import requests
from django.http import StreamingHttpResponse
def api_gateway_portal(request, path=''):
url = 'http://some.ip.address/%s?api_key=12345678901234567890' % (path,)
r = requests.get(url, stream=True)
response = StreamingHttpResponse(
(chunk for chunk in r.iter_content(512 * 1024)),
content_type='application/json')
return response
说明文件:
stream=True
说明)StreamingHttpResponse
iter_content()
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句