如何在 Flask send_file() 或 send_from_directory() 之后运行代码

2023-12-23

我有一个基于 Flask 的网站,用户可以在其中下载一些 PDF 文件。

使用 Flask 可以直接实现send_file() http://flask.pocoo.org/docs/0.10/api/#flask.send_file and send_from_directory() http://flask.pocoo.org/docs/0.10/api/#flask.send_from_directory.

例如:

@app.route('/downloadreport')
def download_report():
    return send_from_directory(
        '/reports', 
        'my_report.pdf', 
        as_attachment=True)

我想执行一些逻辑(我们称之为after_download()) 下载完成后.

我尝试过使用@after_this_request http://flask.pocoo.org/docs/0.10/api/#flask.after_this_request钩。但看起来像send_file()异步运行所以@after_this_request可能会在文件下载之前触发。

  • 例如,如果文件很大,下载可能需要一段时间,因此@after_this_request似乎在下载文件时触发。
  • 它看起来来自文档 http://flask.pocoo.org/docs/0.10/api/#flask.send_file like send_file()使用 WSGI 的文件包装器来完成下载...也许这就是它异步运行的原因?

有办法打电话吗after_download()这样就可以保证在之后运行send_file() has 完全的将文件发送给用户?


你不能。尽管send_file在使用开发服务器时使用 Flask 流式传输文件,它可能(并且确实应该为了性能)使用 Web 服务器(nginx、apache 等)并且X-SendFile在生产中。由于 Web 服务器超出了应用程序的控制范围,因此您运气不好。

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

如何在 Flask send_file() 或 send_from_directory() 之后运行代码 的相关文章

  • Python 如果 kwargs 中的 key 并且 key 为 true

    if force in kwargs and kwargs force is True 感觉应该有更好的方法来编写这个条件 因为我重复了键和变量 假设您确实想检查返回的关键字参数是否is True 这是另一种稍微不同的方式 if kwarg
  • Flask - 如何从 JSON GET 请求获取参数

    我有一个发出以下 GET 请求的客户端 api GET tasks 5fe7eabd 842e 40d2 849e 409655e0891d 22task 22 22hello 22 22url 22 22 tasks 5fe7eabd 8
  • python 打开相对文件夹中所有以.txt结尾的文件

    我需要打开并解析文件夹中的所有文件 但我必须使用相对路径 类似于 input files 我知道在 JavaScript 中你可以使用 path 库来解决这个问题 我怎样才能在Python中做到这一点 这样您就可以获得路径中的文件列表作为列
  • Pyjnius导入jar文件

    Pyjnius 允许您为 java 类创建 python 包装器 例如 Hardware autoclass org myapp Hardware 有没有办法像这样导入现有的 jar 文件 语法是什么样的 您可以将 jar 添加到 CLAS
  • Pandas cut 方法不包括下限

    我正在尝试对包含 0 到 100 范围内的年龄的数据帧列进行分箱 当我尝试使用垃圾箱来包含零年龄时 它不起作用 这是一个使用包含我的数据范围的列表的演示 pd cut pd Series range 101 0 24 49 74 100 范
  • 将Python嵌入到C中——导入模块

    我在使用嵌入式 Python for C 时遇到问题文档 http docs python org extending embedding html 每当我尝试使用导入的模块时 我都会得到 PythonIncl exe 中 0x1e089e
  • 如果工作表不存在,Pandas 将工作表附加到工作簿,否则覆盖工作表

    我正在使用 pandas 更新现有的 Excel 工作簿 当使用ExcelWriter对象 我可以覆盖工作表 如果存在 否则创建一个新工作表吗 我的代码附加了新工作表 但是当我尝试覆盖现有工作表时 它会附加一个名称略有不同的新工作表 例如
  • Python服务器“通常只允许每个套接字地址使用一次”

    我正在尝试用 python 创建一个非常基本的服务器 它侦听端口 当客户端尝试连接时创建 TCP 连接 接收数据 发回某些内容 然后再次侦听 并无限期地重复该过程 这是我到目前为止所拥有的 from socket import server
  • 如何在Python中重命名virtualenv?

    我拼错了名字virtualenv使用以下方法初始化它 virtualenv vnev 我实际上打算创建一个名为的环境venv 尝试重命名后vnev文件夹到venv 我发现这并没有提供太多帮助 激活环境的名称仍然重命名旧的vnev mv vn
  • Django 单元测试数据库没有被拆除?

    我编写了一些单元测试来测试我的 Django 应用程序 特别是一个测试套件中包含大量代码setUp 功能 所述代码的目的是为数据库创建测试数据 是的 我了解固定装置 并且选择在这种情况下不使用它们 当我运行单元测试套件时 运行的第一个测试通
  • Tensorflow:Cuda 计算能力 3.0。所需的最低 Cuda 能力为 3.5

    我正在从源安装tensorflow 文档 https www tensorflow org versions r0 10 get started os setup html installing from sources Cuda驱动版本
  • 并行磁盘 I/O

    我有几个想要阅读的日志文件 不失一般性 假设日志文件处理如下 def process infilepath answer 0 with open infilepath as infile for line in infile if line
  • 有什么理由不在Python中混合使用多处理和线程模块

    我正在考虑使用Python来实现一个需要大量多线程的程序 另一个要求是它将在桌面上运行 因此拥有许多进程将使应用程序显得混乱且难以杀死 在任务管理器中 因此 我正在考虑使用线程和多处理模块来减少进程数量 据我了解 GIL 仅适用于单个进程
  • “gi.repository.Gtk”对象没有属性“gdk”

    我正在尝试使用 GTK 创建多线程 需要 Gtk gdk 但我收到有关没有 gdk 属性的错误 我正在使用带有 Raspbian 的 Raspberry Pi 这就是我导入 GTK 库的方式 try import pygtk pygtk r
  • 类型错误:不可散列的类型:pandas 的“切片”

    我有一个 pandas 数据结构 我这样创建 test inputs pd read csv input test csv delimiter 它的形状 print test inputs shape is this 28000 784 我
  • 按键合并的两个字典的值的并集

    我有两本词典 d1 a x y b k l d2 a m n c p r 如何合并这两个字典以获得这样的结果 d3 a x y m n b k l c p r 当字典的值是简单类型 如 int 或 str 时 这有效 d3 dict i a
  • 如何在Python中仅列出顶级目录?

    我希望能够仅列出某个文件夹内的目录 这意味着我不需要列出文件名 也不需要其他子文件夹 让我们看看一个例子是否有帮助 在当前目录中我们有 gt gt gt os listdir os getcwd cx Oracle doc DLLs Doc
  • 在 python 中,VSCode 调试器不会单步执行外部代码。无法弄清楚如何编辑 launch.json 中的“justMyCode”

    我一直在提到https code visualstudio com docs python debugging justmycode https code visualstudio com docs python debugging jus
  • PyQt 和 QSignalMapper/lambdas - 多个信号,单槽

    我在 PyQt 的菜单上有一个操作列表 每个操作对应我想要显示的每个不同的提要 所以我有一个 Y 将活动源设置为 Y Z 将其设置为 Z 等等 对于网络漫画阅读程序 我的菜单上都有 并且觉得自动化方法可能更好 而不是每次都打字 类似于将其添
  • 如何从集合中检索元素而不删除它?

    假设如下 gt gt gt s set 1 2 3 我如何获得一个值 任何值 s不做s pop 我想将该项目保留在集合中 直到我确定可以删除它 这只有在异步调用另一个主机之后才能确定 又快又脏 gt gt gt elem s pop gt

随机推荐

  • Anaconda:IPython/Jupyter Notebook 中的 Python 3 和 2

    我安装了 Anaconda 的 Python 3 并且希望能够在 python2 和 3 内核之间快速切换 这是在 OSX 上 到目前为止我的步骤包括 conda create p anaconda envs python2 python
  • Python re.sub() 行首锚定

    考虑以下多行字符串 gt gt print s shall i compare thee to a summer s day thou art more lovely and more temperate rough winds do sh
  • 我们如何检查一个数组是否包含#中另一个数组的一个或多个元素?

    我有一个字符串数组 例如 string names P A B G F K R 我有另一个数组 string subnames P G O 我们如何检查名称数组是否包含子名称数组的任何元素 在上面的示例中 名称中存在 P 和 G 这是一个
  • Bash:检查是否按下了 Enter

    How can I check in Bash if the Enter key has been pressed I m using the read command read p Please press ENTER var 首先检查退
  • 使用 argparse 解析字符串

    所以我希望argparse的输入是一个字符串而不是命令行 例如 python3 some script py arg1 arg2 arg3 我想给 argparse 字符串 arg1 arg2 arg3 import argparse co
  • 从浏览器历史记录中删除当前页面

    我正在我的网站上构建一个文本编辑器 工作流程如下 In list 用户从列表中选择他们想要编辑的条目 该列表会将他们带到 edit article id 用户完成工作 然后单击 提交 服务器处理该事物 并将它们重定向回 edit artic
  • Nuxt 为所有动态路由生成带有后备文件的静态站点

    我已经在整个互联网上搜索了我的问题的答案 到目前为止还没有运气 我想要实现的目标 我有一个在通用模式下运行的 Nuxt 应用程序 它就像一个小型社交网络 用户可以在其中创建自己的个人资料并分享他们的工作 因此 我正在使用动态路由 users
  • 我如何清理 mysql 上的临时表

    我们在程序中创建临时表 并且我们不使用 mysql 的持久连接 mysql重启后 有很多临时表慢慢增加 然后innodb buffer pool size正在整理 应用程序正在该服务器上运行 CPU E3 1245 v5 3 50GHz 8
  • 如何远程检查 RedisCloud 数据库中的数据?

    我使用 Heroku 托管一个简单的 Ruby on Rails 测试应用程序来学习如何使用 Redis 我使用 RedisCloud 作为我的 Redis 服务提供商 在本地 我可以使用 Redis CLI 检查我的 Redis 数据库
  • 如何为 Webstorm 编写自己的插件?

    我想为 WebStorm 编写一个专门的插件 可以为自定义框架提供帮助 有关于如何做到这一点的教程吗 没有可用的 WebStorm 特定指南 插件的创建方式与 IntelliJ IDEA 完全相同 http confluence jetbr
  • 使用数据绑定具有多个视图类型的 Android recyclerview 适配器

    是否可以在我的适配器中创建多个视图类型 例如为我的标题添加视图 然后标题下方是一个列表 我的适配器的代码片段 public class StoreAdapter extends RecyclerView Adapter
  • Mysql:显示另一列下方的列的值

    我真的陷入了这个困境 我通过准备一条可执行语句尝试了联合 我非常清楚 SQL 不是一种用于此类任务的语言 但到目前为止 目标是创建一个原型 实际的技术实施将在稍后发生 我会解释我的要求 有一个临时表 我在其中存储名称 项目以及与该项目相关的
  • arch linux 上的 asp.net core 2.1 无法运行

    我已经在 Arch Linux 上使用 pacman 安装了最新版本的 net core sudo pacman S dotnet sdk Running dotnet info显示正确的版本 Host useful for support
  • NSURLIsExcludedFromBackupKey 在 iOS 5.1 之前崩溃

    和许多 iOS 开发者一样 我在使用 5 1 之前的系统时也遇到过应用程序崩溃的问题NSURLIsExcludedFromBackupKey 很好地描述了如何评估该线程上该键的存在 在 iOS 5 0 上使用 NSURLIsExcluded
  • ASP.Net 复选框返回“是”或“否”值(而不是 True / False)

    我正在使用 C 和 ASP Net 3 5 并尝试从复选框获取 是 否 值 而不是 True False 有没有简单的方法或者我需要做 if 语句 一定要试试这个 string doesThisWork chkBox Checked Yes
  • 我应该把 php 文件放在哪里才能让 Xampp 解析它们?

    我完成了上网本 Ubuntu 10 和 XAMPP 的安装 XAMPP 网站教程使安装变得非常容易 但让我感到茫然无措 一切正常 但我不知道将我的手写 php 文件放在哪里 经过几个小时的谷歌搜索 并试图理解文件资源管理器 我意识到我不知道
  • Eclipse CDT 和未知标签

    目前 我们正在考虑将我们的开发环境从 CodeWright 它早已被 Borland 放弃 迁移到 Eclipse 我们使用 Eclipse 进行 Perl PHP 和一些 Windows C 开发 并取得了巨大成功 然而 问题出现在我们的
  • 如何隐藏Android软键盘? [复制]

    这个问题在这里已经有答案了 我在 Linearlayout 中有两个 EditText 视图和一个按钮 在编辑文本中写入完成后 我想隐藏Android虚拟键盘 我该怎么做 您可以像这样使用 InputMethodManager 类 Inpu
  • 如何使用 Cloudflare Worker 发出异步请求(非阻塞)

    我正在编写一个 Cloudflare Worker 需要在我的原始请求完成后 ping 分析服务 我不希望它阻止原始请求 因为我不希望分析系统的延迟或故障减慢或中断请求 如何创建在原始请求完成后开始和结束的请求 addEventListen
  • 如何在 Flask send_file() 或 send_from_directory() 之后运行代码

    我有一个基于 Flask 的网站 用户可以在其中下载一些 PDF 文件 使用 Flask 可以直接实现send file http flask pocoo org docs 0 10 api flask send file and send