用Flask生成word文件

前面我們已經(jīng)實(shí)現(xiàn)了利用python-docx庫自動(dòng)生成表格簡(jiǎn)化工作流程的python腳本。具體請(qǐng)看:生活中的python-利用python-docx自動(dòng)生成表格簡(jiǎn)化工作流程

但是python腳本的缺點(diǎn)就是,如果想讓其他人使用,必須在其電腦上安裝相應(yīng)的python環(huán)境。這對(duì)于電腦不熟練的人來說還是相當(dāng)有難度的。于是就有了這篇文章---用Flask生成我們需要的word文件,之后將web程序部署到公網(wǎng)服務(wù)器上,這樣任何人都可以輕松的使用了。

整體思路很簡(jiǎn)單,就是做一個(gè)web表單,然后在Flask里處理最后生成word供下載即可

關(guān)于如何生成word部分直接看上面的文章即可,這里說明下Flask部分需要注意的地方

一、使用BYtesIO讀寫數(shù)據(jù)

BYtesIO實(shí)現(xiàn)在內(nèi)存中讀寫數(shù)據(jù),我們這里可以先將生成的word文件放在服務(wù)器的內(nèi)存上,然后供下載,代碼如下:

f = io.BytesIO()
document.save(f)

f就是我們生成的word文件并且放在了服務(wù)器的內(nèi)存中。

二、Flask下載中文名文件

正常情況下,我們使用Flask的send_file下載文件沒有問題,但是如果要下載的文件名是中文的話,就會(huì)出現(xiàn)編碼錯(cuò)誤。

解決方法就是從urllib.parse引入quote,首先對(duì)文件名進(jìn)行編碼,然后send_file中作為attachment_filename的參數(shù),這時(shí)候能成功下載文件,但是文件名是編碼后的名字,要解碼的話,我們需要在headers里面聲明編碼格式,即:

filename = quote(name + '清單.doc')
rv = send_file(f, as_attachment=True, attachment_filename=filename)
rv.headers['Content-Disposition'] += "; filename*=utf-8''{}".format(filename)

這樣,對(duì)文件名進(jìn)行UTF-8解碼,F(xiàn)lask就可以正常下載中文名文件了

三、同時(shí)下載兩個(gè)(多個(gè))文件問題

因?yàn)槲业男枨笫禽斎胍淮涡畔?,生成兩個(gè)不同的word文件。而瀏覽器似乎無法實(shí)現(xiàn)一個(gè)submit按鈕同時(shí)下載兩個(gè)文件。所以,只能用兩個(gè)submit按鈕下載不同的word文件。這里我的思路是,將兩個(gè)submit按鈕設(shè)置成同樣的name值,不同的value值,然后通過request.form[]來獲取數(shù)據(jù):

if request.form['key'] == '申請(qǐng)表下載':
    pass
elif request.form['key'] == '清單下載':
    pass

說明

源代碼已經(jīng)上傳至:https://github.com/juventusryp/flask_create_word

下一篇將講述如何將web程序部署到公網(wǎng)服務(wù)器上。

參考鏈接:
StringIO和BytesIO
Flask 下載中文名文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    aimaile閱讀 26,835評(píng)論 6 427
  • # Python 資源大全中文版 我想很多程序員應(yīng)該記得 GitHub 上有一個(gè) Awesome - XXX 系列...
    小邁克閱讀 3,124評(píng)論 1 3
  • 22年12月更新:個(gè)人網(wǎng)站關(guān)停,如果仍舊對(duì)舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,397評(píng)論 22 257
  • 上班第二天,能在晚上十點(diǎn)前坐在自己的小筆記本前寫日更,是一件非常愜意的事情。想想昨天還是帶了備課本在挑燈夜戰(zhàn),真正...
    莜薇閱讀 465評(píng)論 0 1
  • 認(rèn)識(shí)那么久 換來的傷痛 給不了你什么 說分...
    污妖神閱讀 259評(píng)論 0 0

友情鏈接更多精彩內(nèi)容