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

2024-04-04

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

背景

作为连接外部托管微服务的短期解决方案,需要限制用户对未经身份验证的 API 的访问(基于 Django 应用程序的身份验证系统)。以前的开发人员在 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

文档:

  • 正文内容工作流程 http://docs.python-requests.org/en/master/user/advanced/#body-content-workflow (stream=True解释)
  • StreamingHttpResponse https://docs.djangoproject.com/en/1.9/ref/request-response/#streaminghttpresponse-objects
  • iter_content() http://docs.python-requests.org/en/master/api/#requests.Response.iter_content
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - 收到来自外部站点的流请求 的相关文章

随机推荐

  • 调试时无法进入迭代器块 (C#)

    我正在尝试调试从单元测试项目执行的代码 但是当我尝试进入一个方法时 它只是直接传递到下一行 并且不会命中该方法内的断点 该方法位于不同项目中的一个类上 但所有代码都是在调试模式下构建的 我已经尝试清理和重建解决方案 但没有任何乐趣 然而 自
  • 我可以在 Docker for Mac 中使用不安全的 Kubernetes API 端点吗?

    当我在 Docker for Mac 中运行 Kubernetes 时 Kube API 似乎只能从安全端点访问https 本地主机 6443 https localhost 6443 通过 minikube 我可以使用 Kube API
  • Sql CE 多条语句不一致

    长期以来 您确实可以使用 SQL CE 执行多个语句 https stackoverflow com questions 6970502 can i execute multiple statements in sql server com
  • 在 Windows 中执行全屏抓取

    我正在研究一个想法 涉及全面捕获屏幕 包括窗口和应用程序 对其进行分析 然后将项目作为叠加层绘制回屏幕上 我想学习图像处理技术 如果我可以直接访问 Windows 屏幕 我可以获得大量的数据来处理 我可以用它来构建以前从未见过的自动化工具
  • 获取分离片段中的上下文/活动?

    有一个类似的问题 https stackoverflow com questions 20464273 get the application context in fragment in android大多数答案建议使用在哪里getAct
  • 未捕获的类型错误:使用 $.param() 序列化传单数据时无法读取未定义的属性“lat”

    我想先说一下 我对 JavaScript 很陌生 我正在尝试使用 Leaflet 和 AJAX 调用来发布用户位置和地图边界 在我的事件处理程序中stateUpdater onLocationFound日志语句打印出正确的用户坐标和地图边界
  • 具有后备功能的 HTML5 视频标签

    我正在寻找在 html 中嵌入视频和音频的解决方案 新的 videotag 支持 ogg 和 mp4 但是否有针对 flv 和其他格式的后备解决方案 例如 如果我想嵌入一个 ogg 它会检查是否支持html5 如果不支持 它会使用后备 如果
  • 是否可以创建一个 git 存储库,其中分支是来自其他存储库的克隆?

    情况如下 我继承了两台独立的机器 一台用于 开发 另一台是生产机器 问题是 它们当然不同步 为了使情况更加清晰 我在每台计算机上创建了应用程序目录的独立 git 存储库 我现在希望能够比较这些存储库 以便找出它们之间的不同之处 我的想法是创
  • WCF TCP 客户端 - 如何使用它们的基本指南?

    我有一个 WCF 服务并希望使用 TCP 绑定连接到它 这一切都很好 但是你应该如何处理客户呢 我注意到 如果您为每个调用创建一个新客户端 它不会重新使用该通道 并会留下一堆 TCP 连接 直到超时 创建客户端 调用其方法 然后关闭它是正常
  • HTML 5 视频流 .ism 文件?

    我有一个带有媒体服务 4 0 的 IIS 7 0 服务器设置 我创建了一个非常简单的 html 5 页面 其中包含video以其source指向一个 ism文件 是否可以使用 html 5 中的 ism 文件的清单来播放视频 就像在 sil
  • WordPress 插件 WooCommerce,自定义支付网关设置未保存

    我正在为 WordPress 插件 WooCommerce 开发自定义支付网关 我似乎无法保存支付网关的设置 当我在字段中输入信息然后单击 保存 时 页面刷新 所有字段均为空白 我究竟做错了什么 这是我的代码
  • 将参数传递给mapDispatchToProps()

    我不能撒谎 我对 React Redux 有点困惑 我认为很多操作都需要参数 例如从商店中删除项目 但即使我仍在阅读如何以这种方式从组件分派来传递参数 现在大约 2 小时 我没有得到任何答案 我被尝试过this props dispatch
  • Python 和/或 C/C++ 中的高精度算术?

    摘要 哪个 Python 包或 C 库是非常高精度算术运算的最佳选择 我有一些转换小数天数的函数 0 0 0 99999 转换为人类可读的格式 小时 分钟 秒 但更重要的是 毫秒 微秒 纳秒 转换是通过以下函数完成的 请注意 我还没有实施时
  • .Net DataView 和 DataTable 绑定

    我有一个简单的 Windows 窗体应用程序 它将 DataView 绑定到 ListBox 此 DataView 使用 Linq 按特定列降序对我的 DataTable 进行排序 然后我的列表框绑定到数据视图 然后我有一个简单的表单来将数
  • 每次发布后我应该关闭通道/连接吗?

    我在 Node js 中使用 amqplib 但我不清楚代码中的最佳实践 基本上 我当前的代码调用amqp connect 当 Node 服务器启动时 然后为每个生产者和每个消费者使用不同的通道 而不会真正关闭它们中的任何一个 我想知道这是
  • 在 dplyr 中过滤字符串列上的多个值

    我有一个data frame其中一列中包含字符数据 我想过滤多个选项data frame来自同一列 有没有一种简单的方法可以做到我所缺少的 Example data frame name dat days name 88 Lynn 11 T
  • 如何创建案例类的随机实例?

    假设我有几个案例类 例如 case class C c1 Int c2 Double c3 Option String case class B b Int cs Seq C case class A a String bs Seq B 现
  • 在线算法和离线算法有什么区别?

    这些术语在我的数据结构教科书中使用过 但解释非常简洁且不清楚 我认为这与算法在每个计算阶段拥有多少知识有关 请不要链接到维基百科页面 我已经阅读过它 并且仍在寻找澄清 像我十二岁一样的解释和 或示例会更有帮助 维基百科 维基百科页面非常清楚
  • 进程本地覆盖名称解析?

    我有测试代码 我希望在测试时将几个主机名解析为环回 部署后 此代码将根据需要使用正常的系统名称解析 测试和部署主机是最新的 Linux 发行版 例如 SLES11SP1 我想覆盖单个进程的主机名解析 而不是超级用户 有没有办法操纵nsswi
  • Django - 收到来自外部站点的流请求

    如何使用 Django 从用户请求触发的外部 API 获取数据 并将其直接流回请求周期而不使用 或渐进 最小 内存使用 背景 作为连接外部托管微服务的短期解决方案 需要限制用户对未经身份验证的 API 的访问 基于 Django 应用程序的