V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Stitch
V2EX  ›  Python

[求助] Flask 如何实现 ajax 提交数据,后端生成 csv 文件并显示文件下载

  •  
  •   Stitch · 2016-05-27 16:35:56 +08:00 · 4939 次点击
    这是一个创建于 3103 天前的主题,其中的信息可能已经有所发展或是发生改变。
    需求是:根据前端提交的数据 id ,后端从数据库中获取完整数据,生成 csv 文件,然后供下载

    1 、页面展示了一个表格,第一列为 checkbox
    2 、下载按钮调用 jquery 代码,获取选择的 checkbox 数据,然后用 ajax 提交到后端
    3 、后端接收到数据 id 后,查询完整数据,生成 csv 文件
    4 、展示下载界面,供用户下载数据文件。

    调试一天,没有找到比较好的解决方案。

    现在遇到的问题是:
    1 、 ajax 无法下载文件
    2 、 ajax 一般不使用 302

    请高手指导,多谢
    3 条回复    2016-05-30 09:19:18 +08:00
    domty
        1
    domty  
       2016-05-27 19:24:54 +08:00   ❤️ 1
    1.不用 ajax ,直接作表单提交。然后下载的文件标注好类型信息,内容直接写在返回的 io 流里。
    2.把文件在服务器本地化保存,并开放该静态路径以供下载。接口完成后返回静态下载地址链接。 ajax 回调拿到链接后做 window.open()或者界面跳转。
    jugelizi
        2
    jugelizi  
       2016-05-28 01:23:31 +08:00   ❤️ 1
    ajax 请求页面 header 输出下载比如
    header("Content-type:text/csv");
    header("Content-Disposition:attachment;filename=1.csv");
    就是直接下载
    Stitch
        3
    Stitch  
    OP
       2016-05-30 09:19:18 +08:00   ❤️ 1
    感谢两位的解答,综合了两位的意见,问题已经解决。
    最终的解决方案是:
    1 、以 ajax 提交需要下载的 id 信息,后端生成 csv 文件,临时保存。
    2 、 ajax 接口返回临时文件的名称,以 window.open 打开文件下载链接
    3 、文件页面的 header 设置为 @jugelizi 所说的。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2968 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:17 · PVG 08:17 · LAX 16:17 · JFK 19:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.