python - 如何使用烧瓶创建动态文件发送算法
问题描述
我在使用烧瓶提供文件时遇到了一些问题。
首先,我的文件树:
processedMain
--processed1
--processed2
--...
--processedN
在每个文件夹中,我都有一堆文件,我将它们全部表示在表中,我将 href 链接与每个文件的路径放在一起,并通过带有 send_file 返回的路由函数传递它。
问题是我能够使它工作的唯一方法是为每个硬编码的子文件夹创建@app.route,如下所示:
@app.route('/' + pathFits1[1] + '<id>', methods=['GET'])
def returnImg1(id):
return send_file(pathFits1[1] + id, as_attachment=True, attachment_filename=id)
@app.route('/' + pathFits1[2] +'<id>', methods=['GET'])
def returnImg2(id):
return send_file(pathFits1[2] + id, as_attachment=True, attachment_filename=id)
@app.route('/' + pathFits1[3] + '<id>', methods=['GET'])
def returnImg3(id):
return send_file(pathFits1[3] + id, as_attachment=True, attachment_filename=id)
其中 pathFits1[i] 是子文件夹的路径,当用户单击 web 表中的文件时传递 id。
问题是我有很多子文件夹,为每个子文件夹创建 @app.route 很累。这有可能为每件事只创建一条路线吗?
PS我对烧瓶很陌生,所以如果我忘了告诉什么,请告诉我我会填写。
解决方案
实际上,这简单得令人尴尬。正如@Dan.D 所指出的,flask 具有捕获变量的转换器,对我来说这就是我所需要的,因为我的 id 变量已经包含文件的完整路径。所以现在只有这 3 行代码替代了一大堆或重复的代码:
@app.route('/<path:id>')
def returnImg(id):
fileName = id.rsplit('/', 1)[-1]
return send_file(id, as_attachment=True, attachment_filename=fileName)
其中id是文件的完整路径,path:是路径的转换器,fileName是用户将下载的文件的名称,其中没有路径(都在最后一个斜杠之后)
解决方案
您可以在路由表达式中捕获路径。从文档中:
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % subpath
推荐阅读
- ios - Twilio客户端将自定义调用参数从nodejs服务器发送到ios客户端
- java - 如何在没有 applicationContext 的 Spring 服务类中请求 Prototype bean
- javascript - 在 Express 中使用 Promise
- c# - 在 Visual Studio 2013 的 c# 项目中加载 c++ dll 时出错
- go - 主要依赖更新后更新 go 模块导入引用
- excel - 将多个工作表中的数据从其他工作簿复制到当前工作表
- oracle - 必须声明标识符“PIPELINED”
- javascript - 不能做异步功能
- c - c-String 漏洞
- automated-tests - botium 做部分匹配吗?