gpt4 book ai didi

python - Django - 收到来自外部站点的流请求

转载 作者:太空狗 更新时间:2023-10-30 02:17:55 25 4
gpt4 key购买 nike

Django 如何用于从外部 API 获取由用户请求触发的数据,并在不使用(或渐进/最小)内存使用的情况下将其直接流回请求周期?

背景

作为连接外部托管微服务的短期解决方案,需要将用户可访问性(基于 Django 应用程序的身份验证系统)限制为未经身份验证的 API。以前的开发人员在 Javascript 中暴露了这些外部 IP,我们需要一个解决方案来让它们远离公众视线。

要求

  • 我们并不一定要使用requests 库,如果可以帮助加快响应时间,我们愿意使用任何其他库。
  • 来自外部 API 的响应可能有些大 (5-10MB),能够缩短请求周期(用户请求通过 Ajax > Django > 外部 API > Django > 用户)至关重要。

这可能吗?如果是这样,你能推荐一种方法吗?

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

文档:

关于python - Django - 收到来自外部站点的流请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38514919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com