我有一个页面,显示目录中的文件列表.当用户单击"下载"按钮时,所有这些文件都压缩为单个文件,然后提供下载.我知道如何在单击按钮时将此文件发送到浏览器,并且我知道如何重新加载当前页面(或重定向到另一个页面),但是可以在同一步骤中执行这两个操作吗?或者通过下载链接重定向到不同的页面会更有意义吗?
我的下载是使用Flask API启动的send_from_directory.相关测试代码:
@app.route('/download', methods=['GET','POST'])
def download():
error=None
# ...
if request.method == 'POST':
if download_list == None or len(download_list) < 1:
error = 'No files to download'
else:
timestamp = dt.now().strftime('%Y%m%d:%H%M%S')
zfname = 'reports-' + str(timestamp) + '.zip'
zf = zipfile.ZipFile(downloaddir + zfname, 'a')
for f in download_list:
zf.write(downloaddir + f, f)
zf.close()
# TODO: remove zipped files, move zip to archive
return send_from_directory(downloaddir, zfname, as_attachment=True)
return render_template('download.html', error=error, download_list=download_list)
Run Code Online (Sandbox Code Playgroud)
更新:作为一种解决方法,我现在正在加载一个按钮单击的新页面,这使用户可以send_from_directory在返回更新的列表之前启动下载(使用).
我的本地网络上有一个Flask应用程序,它连接到邮件服务器和Web服务.这三个都使用相同的LDAP身份验证源,并且我希望每次应用程序连接到其中一个接口时都要求用户提供相同的凭据.
在会话生命周期内保存用户凭据的最安全方法是什么,以便可以与其他接口共享?
我发现的一个选项是Flask-KVSession,它存储会话变量服务器端.
更新:在测试中,我已尝试在app.config用户登录时将凭据丢弃到dict中.看起来这应该是一个坏主意,但我还没弄清楚原因.我知道它可以使活动会话的凭据消失,但很容易看出它们是否存在,如果不存在则再次提示它们.另外,它们不会像服务器端会话中的变量一样写入文件系统.
我想知道我是否错过了这种方法的任何明显问题.
我有一些排列在a中的对象THREE.scene,我想计算或检索一个相对值,表示每个对象从单个PointLight源接收多少光.简化示例:

与位于摄像机的光,块1的值可能是因为0.50 3 6的表面被完全暴露,而2是〜0.33和3是〜1.67.
我可以通过从光线向每个面的中心绘制光线并观察相交来做到这一点,但我认为可以直接检索每个面部的光线水平.