flask 專案中使用 bootstrapFileInput(進階篇)
bootstrap 為 flask 使用人員提供了一個非常優美且有效的前端頁面元件,但是完美之處還存在些許缺陷,比如檔案的上傳功能.而 bootstrap-fileinput 是基於 bootstrap 的控制元件,非常完美的填補了這個空缺.
注意:
本文是基於 bootstrap-fileinput v4.4.2. github 地址:
注意:
本文是主要是以 示例為基礎進行講解.
建立藍圖 advanced
建立方法請參照 flask 專案中使用 bootstrapFileInput(構建篇) 中 lib 藍圖的建立方法,此處不在贅述.
構建基礎 html 模板
app/advanced/templates/advanced_common/base.html
內容如下:
html> <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->{% block title %}{% endblock %} {% block css %} <!-- 新 Bootstrap 核心 CSS 檔案 --> <!-- 可選的Bootstrap主題檔案(一般不用引入) --> <!-- 個性化主題檔案 --> <!-- font-awesome樣式主題文體 --> <!-- fileinput樣式主題文體 --> {% endblock %} {% block js %} <!-- jQuery檔案。務必在bootstrap.min.js 之前引入 --> <!-- 最新的 Bootstrap 核心 JavaScript 檔案 --> <!-- 個性化 js 檔案 --> <!-- piexif.min.js is only needed if you wish to resize images before upload to restore exif data. This must be loaded before fileinput.min.js --> <!-- sortable.min.js is only needed if you wish to sort / rearrange files in initial preview. This must be loaded before fileinput.min.js --> <!-- purify.min.js is only needed if you wish to purify HTML content in your preview for HTML files. This must be loaded before fileinput.min.js --> <!-- the main fileinput plugin file --> <!-- optionally if you need a theme like font awesome theme you can include it as mentioned below --> <!-- optionally if you need translation for your language then include locale file as mentioned below --> {% endblock %}<!--/.container--><!--/row-->{% block content %} {% endblock %}
base.html 模板引入 css 和 js 時的幾個坑
注意 css 和 js 檔案的匯入順序
首先需要匯入的 js 檔案是 jquery.js.
第二需要匯入 bootstrap 相關的 css 和 js.
第三需要匯入 fileinput 相關的 css 和 js, 請注意專案中的註釋, 相關的檔案匯入也需要有先後順序的要求.
注意版本問題
此專案所需的 jquery 是 jQuery v2.1.1.
此專案所需的 bootstrap 是 v3.3.7 版本
此專案所需的 fileinput 是 v4.4.2 的版本.
其它版本可能會有所不同.
注意 fileinput 使用模式
fileinput 有兩種使用模式,一種是利用 form 提交,一種是 ajax 方式提交.其中 ajax 提交方式,需要從 js 中進行設定, 並將類樣式 class 設定為 file-loading
. 而非 ajax 提交方式需要引入 form 表單, 類樣式 class 需設定為 file
, 本基礎示例都需要引入 form 表單.
進階示例 1
展示
image
從該圖的右下角可以清晰的看到, 這個 form data 裡裹夾著資料 key: 2. 那麼我們用 flask 寫檢視函式的時候,就可以用到這個 key 值.
模板內容
app/advanced/templates/exam_1.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例1
設定最大的檔案上傳大小為 100K . 展示伺服器上的圖片內容,實現 finder 功能. 設定
{% endblock %} {% block title %} 進階示例1 {% endblock %}overwriteInitial
為false
, 新選擇的檔案不會覆蓋原有檔案.
知識點
html 模板的名稱最好在整個專案中,也就是所有的藍圖中都具有唯一性.
模板中的 js 程式碼有多種寫法, 詳細內容請見:
請注意 js 程式碼中的 deleteUrl 項, 此處有多種寫法. 請參閱第二點之後, 選擇適合自己的方法.
請大膽的想象, 如果此示例實際上已具有 finder 的影子.你可以實現檔案上傳, 刪除, 更新, 展示等所有你能想象的功能.
initialPreviewAsData 項, 如果設定為 false, 將不會展示圖片,而只會顯示圖片連結, 如果設定為 true, 則展示圖片.
overwriteInitial 項, 是設定是否覆蓋原有的已上傳項.
maxFileSize 項, 上傳檔案的最大大小.
initialCaption 項, 初始化 input 選擇框內的內容.
檢視函式
app/advanced/views.py
內容如下:
@advanced.route('/delete', methods=['GET', 'POST'])def delete(): key = request.form.get('key') print key return jsonify()@advanced.route('/example_1', methods=['GET', 'POST'])def example_1(): return render_template('exam_1.html')
知識點
第一個 url 函式是實現了檔案的刪除功能. 其中的
request.form.get('key')
就是為了獲取 ajax 提交的 form data 的值, 也就是示意圖中右下角所展示的內容.第二個 url 函式實現了上傳功能的頁面.
進階示例 2
該示例僅僅是把 js 中的 overwriteInitial
項設定成了 true
, 選擇新檔案的時候, 將會覆蓋原有的檔案.
進階示例 3
模板內容
app/advanced/templates/exam_3.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例3
知識點
browseClass 項, 用來設定上傳按鈕的樣式.
showCaption 項, 用來設定是否顯示檔案選擇 input 框.
showRemove 項, 用來設定是否顯示刪除按鈕.
showUpload 項, 用來設定是否顯示上傳按鈕.
該示例僅僅顯示選擇檔案按鈕, 僅此而已.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 4
模板內容
app/advanced/templates/exam_4.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例4
知識點
accept="image/*", input 標籤中的屬性, 表示只能選擇圖片檔案.
previewFileType: image 設定要選擇的檔案格式是圖片格式.
其它的都是為了設定各個按鈕的樣式, 可以自由組合.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 5
模板內容
app/advanced/templates/exam_5.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例5
知識點
previewFileType: "text" 設定要選擇的檔案格式是檔案格式.
allowedFileExtensions 設定能夠接受上傳的集中檔案的格式, 具有驗證功能.
previewClass 預覽框的背景樣式.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 6
模板內容
app/advanced/templates/exam_6.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例6
知識點
showUpload: false. 不顯示上傳按鈕.
layoutTemplates. 用於設定檔案上傳外掛的樣式. 詳見 的 layoutTemplates 項.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 7
模板內容
app/advanced/templates/exam_7.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例7
呼叫外掛方法, 點選 modify 按鈕來開啟獲關閉外掛功能.
{% endblock %} {% block title %} 進階示例7 {% endblock %}
知識點
$("#input-40").fileinput("disable").fileinput("refresh", {showUpload: false}); 其中,第一個 fileinput("disable") 的功能是讓檔案上傳外掛不可用. 第二個 fileinput("refresh", {showUpload: false}) 的功能是不顯示上傳預覽模板.
如果只呼叫第一個 fileinput("disable"), 將只是關閉檔案上傳外掛, 假如你已經選擇了檔案, 已有預覽效果圖, 則不關閉預覽效果圖.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 8
模板內容
app/advanced/templates/exam_8.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例8
僅僅允許上傳的檔案為圖片和影片. 最大上傳的檔案數是 10.
{% endblock %} {% block title %} 進階示例8 {% endblock %}
知識點
allowedFileTypes: ["image", "video"] 外掛的驗證功能, 僅僅允許上傳的檔案為圖片和影片. 可以將 "image", "video" 換成 "text" 試試.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 9
模板內容
app/advanced/templates/exam_9.html
內容如下:
知識點
allowedFileExtensions 外掛的驗證功能, 僅僅允許上傳字尾為 "jpg", "gif", "png", "txt" 的檔案.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 10
模板內容
app/advanced/templates/exam_10.html
內容如下:
{% extends 'advanced_common/base.html' %} {% block content %}進階示例10
僅僅允許上傳字尾為 "jpg", "gif", "png", "txt" 的檔案. 不顯示檔案預覽功能. 且設定錯誤提示的顯示位置.
{% endblock %} {% block title %} 進階示例10 {% endblock %}
知識點
showPreview: false, 不顯示檔案的預覽功能.
elErrorContainer: "#errorBlock". 設定 id 為 errorBlock 的區域來顯示錯誤提示.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
進階示例 11
模板內容
app/advanced/templates/exam_11.html
內容如下:
知識點
uploadUrl 設定上傳檔案的連結. 此處請參閱 flask 專案中使用 bootstrapFileInput(基礎篇) 中的檢視函式內容.
maxFilePreviewSize: 10240 驗證功能, 設定預覽的檔案的大小最大為 10M.
檢視函式
views.py 檢視函式和示例1基本相同,不在贅述.
本章原始碼下載:
作者:藕絲空間
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2804550/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- flask 專案中使用 bootstrapFileInput(構建篇)Flaskboot
- 【進階篇】Java 專案中對使用遞迴的理解分享Java遞迴
- SpreadJS使用進階指南 - 使用 NPM 管理你的專案JSNPM
- 如何在 Flask 專案中使用 MQTTFlaskMQQT
- 使用Flask-Avatars在Flask專案裡設定頭像Flask
- flask 專案拆分Flask
- Flask 專案中解決csrf攻擊Flask
- Ubuntu 22.04 + Pycharm + Flask 配置 Flask 專案UbuntuPyCharmFlask
- 在 Flask 專案中使用 Celery(with 工廠模式 or not)Flask模式
- Flask專案生成ModelFlask
- CentOS 部署 flask專案CentOSFlask
- Flask01 第一個flask專案Flask
- 前端監控進階篇 — Sentry 監控 Next.js 專案實踐前端JS
- flask專案1實戰:2.2 flask框架下使用圖片驗證碼Flask框架
- 使用Flask-Dropzone在Flask程式中實現檔案上傳Flask
- Flask web專案 gunicorn部署FlaskWeb
- 《IT專案經理進階之道》簡介
- git篇--入職初期如何使用Git進行專案管理--01Git專案管理
- 關於使用Pycharm新建flask專案 from flask 紅色波浪線解決辦法PyCharmFlask
- flask 專案開發實戰Flask
- flask專案之圖書案例Flask
- 如何使用專案管理設計專案五個階段專案管理
- Android進階 一個專案,一個ToolbarAndroid
- 【webpack 系列】進階篇Web
- React進階篇2React
- React進階篇1React
- 淺談推進全站HTTPS專案-工程篇HTTP
- TypeScript極速完全進階指南-2中級篇TypeScript
- 用uWSGI和Nginx部署Flask專案NginxFlask
- 01-Flask-初始化專案Flask
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(5) - Flask中的ORM使用Python全棧工程師網頁FlaskORM
- Vue進階知識(一)------專案初始化Vue
- 使用 TypeScript + React + Redux 進行專案開發(入門篇,附原始碼)TypeScriptReactRedux原始碼
- 《MySQL 進階篇》二十:鎖MySql
- 樹莓派-進階篇樹莓派
- python網路進階篇Python
- 介面測試進階篇
- 【進階篇】Redis實戰之Jedis使用技巧詳解Redis