将会话从模板视图传递到 python 请求 api 调用

2024-03-25

我想使用请求库从 Django TemplateView 进行多个内部 REST API 调用。现在我也想将会话从模板视图传递到 api 调用。考虑到性能,推荐的方法是什么?

现在我正在提取cookie从目前的request模板视图中的对象,并将其传递给requests.get() or requests.post()称呼。但问题是,我必须通过request反对我的 API 客户端,这是我不想要的。

这是我用来路由请求的当前包装器:

def wrap_internal_api_call(request, requests_api, uri, data=None, params=None, cookies=None, is_json=False, files=None):
    headers = {'referer': request.META.get('HTTP_REFERER')}
    logger.debug('Request API: %s calling URL: %s', requests_api, uri)
    logger.debug('Referer header sent with requests: %s', headers['referer'])
    if cookies:
        csrf_token = cookies.get('csrftoken', None)
    else:
        csrf_token = request.COOKIES.get('csrftoken', None)

    if csrf_token:
        headers['X-CSRFToken'] = csrf_token
    if data:
        if is_json:
            return requests_api(uri, json=data, params=params, cookies=cookies if cookies else request.COOKIES, headers=headers)
        elif not files:
            return requests_api(uri, data=data, params=params, cookies=cookies if cookies else request.COOKIES, headers=headers)
        else:
            return requests_api(uri, data=data, files=files, params=params, cookies=cookies if cookies else request.COOKIES,
                                headers=headers)
    else:
        return requests_api(uri, params=params, cookies=cookies if cookies else request.COOKIES, headers=headers)

基本上我想摆脱它request参数(第一个参数),因为要调用它我必须继续传递request对象从 TemplateViews 到内部服务。另外,如何在多个调用之间保持持久连接?


REST 与直接调用视图

虽然 Web 应用程序可以对其自身进行 REST API 调用。这不是 REST 的设计目的。请考虑以下内容:https://docs.djangoproject.com/ja/1.9/topics/http/middleware/ https://docs.djangoproject.com/ja/1.9/topics/http/middleware/

正如您所看到的,django 请求/响应周期有相当多的开销。添加到此网络服务器和 wsgi 容器的开销。在客户端,您有与请求库相关的开销,但请稍等,客户端也恰好是同一个 Web 应用程序,因此它也成为 Web 应用程序开销的一部分。还有持久性的问题(我很快就会谈到)。

最后但并非最不重要的一点是,如果您有 DNS 循环设置,您的请求实际上可能会在返回同一服务器之前先通过网络发出。有一种更好的方法,直接调用视图。

无需调用其余 API 即可调用另一个视图非常简单

 other_app.other_view(request, **kwargs)

这已在以下链接中讨论过几次Django 从另一个基于类的视图调用基于类的视图 https://stackoverflow.com/questions/14956678/django-call-class-based-view-from-another-class-based-view and 我可以从另一个视图中调用一个视图吗? https://stackoverflow.com/questions/4808329/can-i-call-a-view-from-within-another-view所以我就不详细说明了。

持续请求

持久http请求(谈论python请求而不是django.http.request.HttpRequest https://docs.djangoproject.com/en/1.9/_modules/django/http/request/#HttpRequest)通过会话对象进行管理(再次不要与 django 会话混淆)。避免混淆确实很困难:

Session 对象允许您跨时间保存某些参数 要求。它还会在所有发出的请求中保留 cookie Session 实例,并将使用 urllib3 的连接池。因此,如果 您正在向同一主机(底层 TCP)发出多个请求 连接将被重用,这可能会导致显着的 绩效提升

对 django 视图的不同点击可能来自不同的用户,因此您不希望内部 REST 调用重复使用相同的 cookie。另一个问题是 python 会话对象无法在 django 视图的两次不同点击之间持久化。套接字通常无法序列化,这是将它们放入 memcached 或 redis 的要求。

如果您仍想坚持使用内部 REST

我认为 @julian 的答案显示了如何避免将 django 请求实例作为参数传递。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将会话从模板视图传递到 python 请求 api 调用 的相关文章

  • 重新格式化 csv 文件

    我有这个 csv 文件 其中只有两个条目 这里是 Meat One Abattoirs Exporters Food Delivery Butchers Retail Meat Dealers Retail Meat Freezer Mea
  • Pandas 在日期列上重新采样

    我有一个dataframe以日期作为列 我想对每日到每月的值进行平均 我尝试过使用 Time Grouper 和 Resample 但它不喜欢列名称是字符串 我似乎可以弄清楚如何将列变成类似DatetimeIndex 我的起始数据框 imp
  • Pandas:删除具有纳米值索引的行

    给定以下 pandas DataFrame 其中一些索引是NaN 如何删除第三行和第八行 因为它们的索引是NaN Thanks import pandas as pd import numpy as np data list abcdefg
  • 以编程方式设置 mosquitto 中的访问控制限制

    我正在开发一个将使用 mqtt 的应用程序 我将使用 python 库 我一直倾向于使用 mosquitto 但找不到以编程方式为其设置访问控制限制的方法 我正在编写的应用程序需要能够区分用户 并且只允许他们订阅某些主题 当前的解决方案看起
  • python 函数中的任意数量的参数

    我想学习如何在 python 函数中传递任意数量的参数 所以我以递归方式编写了一个简单的 sum 函数 如下所示 def mySum args if len args 1 return args 0 else return args 1 m
  • PyCharm 虚拟环境和 Anaconda 环境有什么区别?

    当我在 PyCharm 中创建新项目时 它会创建一个新的虚拟环境 我读到 当我执行Python脚本时 它们是使用此环境中的解释器而不是系统环境来执行的 因此 如果我需要安装一些软件包 我只能将它们安装在这个环境中 而不是在系统环境中 这很酷
  • 单词和表情符号计数器

    我有一个包含 clear message 列的数据框 并且创建了一个用于计算每行中所有单词的列 history word count history clear message apply lambda x Counter x split
  • 将文件添加到现有 zip 文件

    我正在使用 python 的zipfile module zip 文件位于以下路径 home user a b c test zip并在下面创建另一个文件 home user a b c 1 txt我想将此文件添加到现有的 zip 中 我这
  • 如何设置 QTableView 中特定单元格的线条样式?

    我正在使用 QT GUI 我正在使用 QTableView 实现一个简单的十六进制编辑控件 我最初的想法是使用一个有十七列的表格 表的每一行都有 16 个十六进制字节 然后在第十七列中显示该数据的 ASCII 表示形式 理想情况下 我想编辑
  • 尝试导入 cv2(opencv-python) 包时出错

    我正在尝试使用 cv2 opencv python 包访问我的网络摄像头 当我尝试导入它时 出现此错误 Traceback most recent call last File server py line 6 in
  • Django 模型选择不会因无效选择而引发错误

    我在 Django 中有一个带有选择字段的对象 class CustomFieldType models Model STRING STRING DATE DATE BOOLEAN BOOLEAN NUMERIC NUMERIC EMAIL
  • Python 和 Scipy:如何拟合冯·米塞斯分布?

    我正在尝试拟合来自 scipy 的冯 米塞斯分布 http docs scipy org doc scipy reference generated scipy stats vonmises html http docs scipy org
  • 跳过一个端点的 Flask 日志记录?

    我有一个 Python Flask 应用程序 有一项运行状况检查经常访问一个端点 但我不想在日志中看到它 如何仅禁用一个 GET 端点的日志记录 而保留其他所有端点的日志记录 艾蒂安 贝尔萨克为我指明了正确的方向 这就是我的实现方式 fro
  • 即使在 virtualenv 激活后,python 也指向全局安装

    有点奇怪 我激活了虚拟环境python仍然指向全局安装 which python usr bin python source virtualenv bin activate virtualenv which python usr bin p
  • 如何使用 RGB 元组列表在 PIL 中创建图像?

    假设我有一个像素列表 表示为具有 3 个 RGB 值的元组 列表如下list im getdata 像这样 0 0 0 255 255 255 38 29 58 如何使用这种格式的 RGB 值 每个元组对应一个像素 创建新图像 感谢您的帮助
  • 在 Python 中规范化数字列表

    我需要对值列表进行标准化以适应概率分布 即在 0 0 和 1 0 之间 我明白how标准化 但很好奇 Python 是否有一个函数可以自动执行此操作 我想从 raw 0 07 0 14 0 07 to normed 0 25 0 50 0
  • 将数据帧转换为多列的系列

    我尝试将数据帧转换为系列但它显示以下错误 我使用 pandas Series Dataframe gt 将 Dataframe 转换为系列 我想要第一张图像格式的输出 请尝试以下方法从提到的数据中获取 Series 对象 假设data是您正
  • 加载所有腌制对象[重复]

    这个问题在这里已经有答案了 import pickle ListNames Name1 City1 Email1 Name2 City2 Number2 ListNumbers 1 2 3 4 5 6 7 8 with open TestP
  • 根据 pandas 中其他数据帧的值更改一个数据帧的值

    我有一个数据框 df1 id value 1 100 2 100 3 100 4 100 5 100 我有另一个数据框 df2 id value 2 50 5 30 我想用 df1 中的值替换 df2 中 id 的这些值 最终修改后的df1
  • 在 Pandas DataFrame 中拆分列表

    我有一个包含多列的 csv 文件 使用 pandas 我将此 csv 文件读入数据帧 并有一个日期时间索引和五六个其他列 其中一列是时间戳列表 下面带有索引的示例 CreateDate TimeStamps 4 1 11 Timestamp

随机推荐

  • 使用基本 R 进行分组和堆叠条形图

    我想创建一个组合条形图 其中 data1 和 data2 内堆叠 而 data1 和 data2 之间分组在基本 R 图形中 安排上是这样的 data1 lt matrix c 1 5 rep 1 5 rep 4 5 ncol 5 data
  • HTML 重新加载下拉值 JavaScript

    我有一个这样的脚本
  • 如果列值为NULL,如何实现默认值?

    我想用这些条件从表中检索一些列值 如果值为 NULL 或 空字符串 则返回一些用户定义的值 如果不满足条件 则返回其值 我怎样才能弄清楚 这是我的表查询 CREATE TABLE AUCTION CAR BID bid seq bigint
  • graphviz.backend.ExecutableNotFound:无法执行 ['dot', '-Tpng'],请确保 Graphviz 可执行文件位于系统的 PATH 上

    我花了一个小时找不到这个问题的任何解决方案 所以决定最好在这里提问 唯一给出的丰富信息here https stackoverflow com questions 35064304 runtimeerror make sure the gr
  • Ctrl-c 不使用 Git Bash 停止 Tomcat

    正如标题所示 我使用 Windows 7 在 Git Bash 上运行 Tomcat 但无法使用 Ctrl c 关闭服务器 当我按下它时 光标会消失半秒钟 但除此之外什么也没有发生 编辑 在 VSCode 的集成终端中运行 git bash
  • C# 中的工程符号?

    是否有任何代码 或内置函数 允许以工程符号输出浮点数 例如 1 5e 4将显示为150 5e 3 将显示为5m 这可能需要重构 private static string ToEngineeringNotation this double
  • android 无法打开文件进行读取

    您好 我创建了我的第一个 Hello World 应用程序 并按照以下说明进行操作 发布在developer android上 但是当我连接我的索尼xperia s时 启用调试并运行我的应用程序 我在 logcat 错误中看到说 E 444
  • 如何在 CentOs 中安装 php-xml

    我正在尝试在 CentOs 6 5 上安装 php xml 我输入命令yum install php xml 我收到此错误 Loaded plugins fastestmirror Loading mirror speeds from ca
  • maven(在开发配置文件下运行)如何包含index.html中的javascript文件?

    从 2 0 版开始我就没有使用过 jhipster 目前我正在追赶版本 4 0 6 当我尝试通过 mvnw 构建初始应用程序时 默认情况下devmaven 配置文件 从命令行 应用程序 javascript 文件不会添加到 index ht
  • 引用 dll 而不复制它们 C#

    当我们创建一个新的C 项目并引用一个dll时 该dll在编译项目时会被复制到项目的输出目录中 有没有一种方法可以引用 dll 文件而不将它们复制到项目的输出目录 并让可执行文件在运行时使用它们 类似于Assemblies如果我没错的话 我尝
  • AWS CDK 将 API 网关 URL 传递到同一堆栈中的静态站点

    我正在尝试在单个堆栈中部署 S3 静态网站和 API 网关 lambda S3 静态站点中的 JavaScript 调用 lambda 来填充 HTML 列表 但它需要知道 lambda 集成的 API 网关 URL 目前 我生成一个 Re
  • 如何强制视图刷新而不从可观察对象自动触发它?

    Note 这主要是为了调试和理解 KnockoutJS 有没有办法显式请求 Knockout 从 已绑定 视图模型刷新视图 我正在寻找类似的东西 ko refreshView 我知道这不是 Knockout 的预期用途 但我仍然想知道是否有
  • android studio 使用 build.gradle 进行地址清理

    我正在尝试使用此处描述的地址清理程序 使用 clang 构建我的应用程序 https github com google sanitizers wiki AddressSanitizer https github com google sa
  • 获取HashMap值的count个数

    使用这里的代码link https stackoverflow com questions 37129625 read and find string from text file将文本文件内容加载到 GUI Map
  • 谷歌分析用户 ID 跟踪

    我通过通用分析实现了 userID 跟踪 ga set uid 我认为我应该能够在报告中看到特定用户 但似乎甚至不可能在任何类型的报告中显示不同的用户 我在分析 API 中也没有找到这个选项 我希望能够跟踪该特定用户创建的事件 是否可以在不
  • 如何重命名 git stash?

    我有一个名称不正确的藏品 我想修正这个名称 使其准确 如何重命名藏匿处 让我们假设您的存储列表如下所示 git stash list stash 0 WIP on master Add some very important feature
  • 如何使用 Astro 获取查询字符串参数

    我正在使用一种名为 Astro 的新技术 https astro build https astro build 构建一个完全静态的服务器端渲染页面 交付零 JS 我有一个带有简单文本输入表单的页面 当用户填写该表单并单击提交按钮时 它会向
  • gpus_ReturnGuiltyForHardwareRestart

    我找到了有关该错误的更多详细信息 它似乎与信息有关 gpus ReturnGuiltyForHardwareRestart google了一下 似乎关于这个bug的信息相当有限 您以前遇到过这种情况并且知道如何解决吗 我认为我有必要更新我所
  • 下载并解压内存中的 gzip 文件?

    我想使用 urllib 下载文件并在保存之前将文件解压缩到内存中 这就是我现在所拥有的 response urllib2 urlopen baseURL filename compressedFile StringIO StringIO c
  • 将会话从模板视图传递到 python 请求 api 调用

    我想使用请求库从 Django TemplateView 进行多个内部 REST API 调用 现在我也想将会话从模板视图传递到 api 调用 考虑到性能 推荐的方法是什么 现在我正在提取cookie从目前的request模板视图中的对象