如何使用Django从外部API获取数据,由用户请求触发,并在请求周期中直接将其流回,而不使用(或使用渐进/最小)内存使用?
背景
作为连接外部托管微服务的短期解决方案,需要将用户可访问性(基于Django应用程序的身份验证系统)限制为未经身份验证的API。以前的开发人员在Javascript中暴露了这些外部IP,我们需要一个解决方案来让他们脱离公众的视线。
要求
这可能吗?如果是这样,你能建议一种方法吗?
.config(function ($compileProvider, routes, $provide) {
//Lazy define
$compileProvider.directive('myDirective', function ($rootScope, $location, $filter) {
console.log( "This IS called" );
return {
restrict: 'A',
link: function (scope, element, attrs) {
console.log( "This is NEVER called");
}
};
}
}
请注意 - 我完全清楚这是一个糟糕的长期解决方案,但在完成新的外部身份验证系统之前,必须进行短期演示。
答案 0 :(得分:7)
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()