Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
文作者:HelloGitHub-kalifun
這是 HelloGitHub 推出的《講解開源項(xiàng)目》系列,今天給大家推薦一個(gè)基于 Bootstrap 和 jQuery 的表格插件:Bootstrap-Table
一、介紹
從項(xiàng)目名稱就可以知道,這是一款 Bootstrap 的表格插件。表格的展示的形式所有的前端幾乎在工作中都有涉及過(guò),Bootstrap Table 提供了快速的建表、查詢、分頁(yè)、排序等一系列功能。
項(xiàng)目地址:https://github.com/wenzhixin/bootstrap-table
可能 Bootstrap 和 jQuery 技術(shù)有些過(guò)時(shí)了,但如果因?yàn)闅v史的技術(shù)選型或者舊的項(xiàng)目還在用這兩個(gè)庫(kù)的話,那這個(gè)項(xiàng)目一定會(huì)讓你的嘴角慢慢上揚(yáng),拿下表格展示方面的需求易如反掌!
二、模式
Boostatrp Table 分為兩種模式:客戶端(client)模式、服務(wù)端(server)模式。
三、實(shí)戰(zhàn)操作
Tips: 解釋說(shuō)明均在代碼中以注釋方式展示,請(qǐng)大家注意閱讀。
我們采用的是最簡(jiǎn)單的 CDN 引入方式,代碼可直接運(yùn)行。復(fù)制代碼并將配置好 json 文件的路徑即可看到效果。
3.1 快速上手
注釋中的星號(hào)表示該參數(shù)必寫,話不多說(shuō)上代碼。示例代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Hello, Bootstrap Table!</title> // 引入 css <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous"> <link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.15.3/dist/bootstrap-table.min.css"> </head> <body> // 需要填充的表格 <table id="tb_departments" data-filter-control="true" data-show-columns="true"></table> // 引入js <script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script> <script src="https://unpkg.com/bootstrap-table@1.15.3/dist/bootstrap-table.min.js"></script> <script> window.operateEvents = { // 當(dāng)點(diǎn)擊 class=delete 時(shí)觸發(fā) 'click .delete': function (e,value,row,index) { // 在 console 打印出整行數(shù)據(jù) console.log(row); } }; $('#tb_departments').bootstrapTable({ url: '/frontend/bootstrap-table/user.json', //請(qǐng)求后臺(tái)的 URL(*) method: 'get', //請(qǐng)求方式(*) // data: data, //當(dāng)不使用上面的后臺(tái)請(qǐng)求時(shí),使用data來(lái)接收數(shù)據(jù) toolbar: '#toolbar', //工具按鈕用哪個(gè)容器 striped: true, //是否顯示行間隔色 cache: false, //是否使用緩存,默認(rèn)為 true,所以一般情況下需要設(shè)置一下這個(gè)屬性(*) pagination: true, //是否顯示分頁(yè)(*) sortable: false, //是否啟用排序 sortOrder: "asc", //排序方式 sidePagination: "client", //分頁(yè)方式:client 客戶端分頁(yè),server 服務(wù)端分頁(yè)(*) pageNumber:1, //初始化加載第一頁(yè),默認(rèn)第一頁(yè) pageSize: 6, //每頁(yè)的記錄行數(shù)(*) pageList: [10, 25, 50, 100], //可供選擇的每頁(yè)的行數(shù)(*) search: true, //是否顯示表格搜索,此搜索是客戶端搜索,不會(huì)進(jìn)服務(wù)端,所以個(gè)人感覺意義不大 strictSearch: true, //啟用嚴(yán)格搜索。禁用比較檢查。 showColumns: true, //是否顯示所有的列 showRefresh: true, //是否顯示刷新按鈕 minimumCountColumns: 2, //最少允許的列數(shù) clickToSelect: true, //是否啟用點(diǎn)擊選中行 height: 500, //行高,如果沒(méi)有設(shè)置 height 屬性,表格自動(dòng)根據(jù)記錄條數(shù)覺得表格高度 uniqueId: "ID", //每一行的唯一標(biāo)識(shí),一般為主鍵列 showToggle:true, //是否顯示詳細(xì)視圖和列表視圖的切換按鈕 cardView: false, //是否顯示詳細(xì)視圖 detailView: false, //是否顯示父子表 showExport: true, //是否顯示導(dǎo)出 exportDataType: "basic", //basic', 'all', 'selected'. columns: [{ checkbox: true //復(fù)選框標(biāo)題,就是我們看到可以通過(guò)復(fù)選框選擇整行。 }, { field: 'id', title: 'ID' //我們?nèi)son中id的值,并將表頭title設(shè)置為ID }, { field: 'username', title: '用戶名' //我們?nèi)?json 中 username 的值,并將表頭 title 設(shè)置為用戶名 },{ field: 'sex', title: '性別' //我們?nèi)?json 中 sex 的值,并將表頭 title 設(shè)置為性別 },{ field: 'city', title: '城市' //我們?nèi)?json 中 city 的值,并將表頭 title 設(shè)置為城市 },{ field: 'sign', title: '簽名' //我們?nèi)?json 中 sign 的值,并將表頭 title 設(shè)置為簽名 },{ field: 'classify', title: '分類' //我們?nèi)?json 中 classify 的值,并將表頭 title 設(shè)置為分類 },{ //ormatter:function(value,row,index) 對(duì)后臺(tái)傳入數(shù)據(jù) 進(jìn)行操作 對(duì)數(shù)據(jù)重新賦值 返回 return 到前臺(tái) // events 觸發(fā)事件 field: 'Button',title:"操作",align: 'center',events:operateEvents,formatter:function(value,row,index){ var del = '<button type="button" class="btn btn-danger delete">刪除</button>' return del; } } ], responseHandler: function (res) { return res.data //在加載遠(yuǎn)程數(shù)據(jù)之前,處理響應(yīng)數(shù)據(jù)格式. // 我們?nèi)〉闹翟赿ata字段中,所以需要先進(jìn)行處理,這樣才能獲取我們想要的結(jié)果 } }); </script> </body> </html>
上面的代碼展示通過(guò)基本 API 實(shí)現(xiàn)基礎(chǔ)的功能,示例代碼并沒(méi)有羅列所有的 API。該庫(kù)還有很多好玩的功能等著大家去發(fā)現(xiàn),正所謂師父領(lǐng)進(jìn)門修行靠個(gè)人~
3.2 拆解講解
下面對(duì)關(guān)鍵點(diǎn)進(jìn)行闡述,為了更方便使用的小伙伴清楚插件的用法。
3.2.1 初始化部分
選擇需要初始化表格。 $('#tb_departments').bootstrapTable({}) 這個(gè)就像table的入口一樣。 <table id="tb_departments" data-filter-control="true" data-show-columns="true"></table>
3.2.2 閱讀數(shù)據(jù)部分
columns:[{field: 'Key', title: '文件路徑',formatter: function(value,row,index){} }]
3.2.3 事件觸發(fā)器
events:operateEvents window.operateEvents = { 'click .download': function (e,value,row,index) { console.log(row); } }
因?yàn)楹芏鄷r(shí)候我們需要針對(duì)表格進(jìn)行處理,所以事件觸發(fā)器是一個(gè)不錯(cuò)的選擇。比如:它可以記錄我們的行數(shù)據(jù),可以利用觸發(fā)器進(jìn)行定制函數(shù)的執(zhí)行等。
四、擴(kuò)展
介紹幾個(gè)擴(kuò)展可以讓我們便捷的實(shí)現(xiàn)更多的表格功能,而不需要自己造輪子讓我們的工作更加高效(也可以進(jìn)入官網(wǎng)查看擴(kuò)展的具體使用方法,官方已經(jīng)收集了大量的擴(kuò)展)。老規(guī)矩直接上代碼:
4.1 表格導(dǎo)出
<script src="js/bootstrap-table-export.js"></script> showExport: true, //是否顯示導(dǎo)出 exportDataType: basic, //導(dǎo)出數(shù)據(jù)類型,支持:'基本','全部','選中' exportTypes:['json', 'xml', 'csv', 'txt', 'sql', 'excel'] //導(dǎo)出類型
4.2 自動(dòng)刷新
<script src="extensions/auto-refresh/bootstrap-table-auto-refresh.js"></script> autoRefresh: true, //設(shè)置 true 為啟用自動(dòng)刷新插件。這并不意味著啟用自動(dòng)刷新 autoRefreshStatus: true, //設(shè)置 true 為啟用自動(dòng)刷新。這是表加載時(shí)狀態(tài)自動(dòng)刷新 autoRefreshInterval: 60, //每次發(fā)生自動(dòng)刷新的時(shí)間(以秒為單位) autoRefreshSilent: true //設(shè)置為靜默自動(dòng)刷新
4.3 復(fù)制行
<script src="extensions/copy-rows/bootstrap-table-copy-rows.js"></script> showCopyRows: true, //設(shè)置 true 為顯示復(fù)制按鈕。此按鈕將所選行的內(nèi)容復(fù)制到剪貼板 copyWithHidden: true, //設(shè)置 true 為使用隱藏列進(jìn)行復(fù)制 copyDelimiter: ', ', //復(fù)制時(shí),此分隔符將插入列值之間 copyNewline: '\n' //復(fù)制時(shí),此換行符將插入行值之間
五、總結(jié)
本篇文章只是簡(jiǎn)單的闡述 Bootstrap-Table 如何使用,正在對(duì)表格功能實(shí)現(xiàn)而憂愁的小伙伴,可以使用 HelloGitHub 推薦的這款插件。你會(huì)發(fā)現(xiàn)網(wǎng)頁(yè)制作表格還可以如此快捷,期待小伙伴挖掘出更加有意思的功能哦。
注:上面 js 部分并沒(méi)有采用函數(shù)形式,建議在使用熟悉之后還是采用函數(shù)形式,這樣也方便復(fù)用及讓代碼看起來(lái)更加規(guī)范。
參考資料
[1]《講解開源項(xiàng)目》: https://github.com/HelloGitHub-Team/Article
[2]Bootstrap-Table 項(xiàng)目地址: https://github.com/wenzhixin/bootstrap-table
[3]Bootstrap-Table 官方文檔: https://bootstrap-table.com/docs/getting-started/introduction/
『講解開源項(xiàng)目系列』——讓對(duì)開源項(xiàng)目感興趣的人不再畏懼、讓開源項(xiàng)目的發(fā)起者不再孤單。跟著我們的文章,你會(huì)發(fā)現(xiàn)編程的樂(lè)趣、使用和發(fā)現(xiàn)參與開源項(xiàng)目如此簡(jiǎn)單。歡迎留言聯(lián)系我們、加入我們,讓更多人愛上開源、貢獻(xiàn)開源~
評(píng)分析平臺(tái)-介紹
具體介紹見之前的視頻:
差評(píng)分析助手-01-介紹
差評(píng)分析助手-02-技術(shù)
差評(píng)分析助手-03-演示
目標(biāo)
一個(gè)涉及到Python基礎(chǔ),爬蟲,數(shù)據(jù)分析,前端,web框架,數(shù)據(jù)庫(kù),緩存,任務(wù)隊(duì)列,服務(wù)部署,上線優(yōu)化的綜合性可擴(kuò)展的項(xiàng)目。
綜合運(yùn)用各種編程知識(shí),培養(yǎng)全棧開發(fā)能力。
功能
前端
展示業(yè)務(wù)流程
分頁(yè)
跳轉(zhuǎn)
數(shù)據(jù)可視化
后端
制作API,獲取狀態(tài)和結(jié)果
根據(jù)分頁(yè)返回?cái)?shù)據(jù)
緩存優(yōu)先
分頁(yè)獲取
異步執(zhí)行任務(wù)
windows: pip install eventlet
> celery worker -A app.celery --loglevel=debug -P eventlet
前后端分離
跨域
restful
驗(yàn)證
docker服務(wù)部署
上線優(yōu)化
技術(shù)
前端
vue
https://cn.vuejs.org/v2/guide/
vuex
https://vuex.vuejs.org/zh/guide/state.html
elementUI
https://element.eleme.cn/#/zh-CN
https://github.com/ElementUI/vue-cli-plugin-element
echarts
https://gallery.echartsjs.com/explore.html#sort=rank~timeframe=all~author=all
https://www.echartsjs.com/tutorial.html
https://www.echartsjs.com/examples/
v-charts
https://v-charts.js.org/#/props
后端API
Python
基礎(chǔ)知識(shí)
面向?qū)ο?/p>
網(wǎng)絡(luò)基礎(chǔ)
http
web框架
flask
http://flask.pocoo.org/
https://flask-restful.readthedocs.io/en/latest/
https://flask-httpauth.readthedocs.io/en/latest/
爬蟲
優(yōu)化
制作API
mongodb
存儲(chǔ)爬取結(jié)果
redis
記錄任務(wù),爬蟲狀態(tài)
緩存分析結(jié)果
celery
任務(wù)隊(duì)列
rabbitmq
pandas
提取有用數(shù)據(jù)
https://www.jianshu.com/p/161364dd0acf
https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html#merge
可視化
維度:觀察數(shù)據(jù)的角度和對(duì)數(shù)據(jù)的描述
目標(biāo):使用圖表展示數(shù)據(jù),讓用戶快速抓住要點(diǎn)信息
要點(diǎn):把握?qǐng)D表特點(diǎn),使用不同維度,展示合適的數(shù)據(jù)。
圖表分類
折線圖
示意圖
展示數(shù)據(jù)的趨勢(shì),在橫軸的維度上展示縱軸數(shù)據(jù)的變化趨勢(shì)
柱狀圖
示意圖
比較數(shù)據(jù)大小,多個(gè)維度的變化分析,用大小和顏色區(qū)分
局限:分類過(guò)多則無(wú)法展示數(shù)據(jù)特點(diǎn)
餅圖
示意圖
表示一組數(shù)據(jù)的占比
工具
echarts:
https://www.echartsjs.com
http://echarts.apache.org/
pyecharts: https://pyecharts.org/#/zh-cn/intro
v-charts: https://v-charts.js.org/#/
后續(xù)會(huì)逐步推出前端到后端的開發(fā)過(guò)程,敬請(qǐng)關(guān)注。
ava識(shí)堂,一個(gè)高原創(chuàng),高收藏,有干貨的微信公眾號(hào),歡迎關(guān)注
sort 命令對(duì) File 參數(shù)指定的文件中的行排序,并將結(jié)果寫到標(biāo)準(zhǔn)輸出。如果 File 參數(shù)指定多個(gè)文件,那么 sort 命令將這些文件連接起來(lái),并當(dāng)作一個(gè)文件進(jìn)行排序。
sort語(yǔ)法
[root@www ~]# sort [-fbMnrtuk] [file or stdin] 選項(xiàng)與參數(shù): -f :忽略大小寫的差異,例如 A 與 a 視為編碼相同; -b :忽略最前面的空格符部分; -M :以月份的名字來(lái)排序,例如 JAN, DEC 等等的排序方法; -n :使用『純數(shù)字』進(jìn)行排序(默認(rèn)是以文字型態(tài)來(lái)排序的); -r :反向排序; -u :就是 uniq ,相同的數(shù)據(jù)中,僅出現(xiàn)一行代表; -t :分隔符,默認(rèn)是用 [tab] 鍵來(lái)分隔; -k :以那個(gè)區(qū)間 (field) 來(lái)進(jìn)行排序的意思
對(duì)/etc/passwd 的賬號(hào)進(jìn)行排序 [root@www ~]# cat /etc/passwd | sort adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
sort 是默認(rèn)以第一個(gè)數(shù)據(jù)來(lái)排序,而且默認(rèn)是以字符串形式來(lái)排序,所以由字母 a 開始升序排序。
/etc/passwd 內(nèi)容是以 : 來(lái)分隔的,我想以第三欄來(lái)排序,該如何
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3 root:x:0:0:root:/root:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin
默認(rèn)是以字符串來(lái)排序的,如果想要使用數(shù)字排序:
cat /etc/passwd | sort -t ':' -k 3n root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
默認(rèn)是升序排序,如果要倒序排序,如下
cat /etc/passwd | sort -t ':' -k 3nr nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ntp:x:106:113::/home/ntp:/bin/false messagebus:x:105:109::/var/run/dbus:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
如果要對(duì)/etc/passwd,先以第六個(gè)域的第2個(gè)字符到第4個(gè)字符進(jìn)行正向排序,再基于第一個(gè)域進(jìn)行反向排序。
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r sync:x:4:65534:sync:/bin:/bin/sync proxy:x:13:13:proxy:/bin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh
查看/etc/passwd有多少個(gè)shell:對(duì)/etc/passwd的第七個(gè)域進(jìn)行排序,然后去重:
cat /etc/passwd | sort -t':' -k 7 -u root:x:0:0:root:/root:/bin/bash syslog:x:101:102::/home/syslog:/bin/false daemon:x:1:1:daemon:/usr/sbin:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
uniq命令可以去除排序過(guò)的文件中的重復(fù)行,因此uniq經(jīng)常和sort合用。也就是說(shuō),為了使uniq起作用,所有的重復(fù)行必須是相鄰的。
uniq語(yǔ)法
[root@www ~]# uniq [-icu] 選項(xiàng)與參數(shù): -i :忽略大小寫字符的不同; -c :進(jìn)行計(jì)數(shù) -u :只顯示唯一的行
testfile的內(nèi)容如下
cat testfile hello world friend hello world hello
直接刪除未經(jīng)排序的文件,將會(huì)發(fā)現(xiàn)沒(méi)有任何行被刪除
#uniq testfile hello world friend hello world hello
排序文件,默認(rèn)是去重
#cat words | sort |uniq friend hello world
排序之后刪除了重復(fù)行,同時(shí)在行首位置輸出該行重復(fù)的次數(shù)
#sort testfile | uniq -c 1 friend 3 hello 2 world
僅顯示存在重復(fù)的行,并在行首顯示該行重復(fù)的次數(shù)
#sort testfile | uniq -dc 3 hello 2 world
僅顯示不重復(fù)的行
sort testfile | uniq -u friend
cut命令可以從一個(gè)文本文件或者文本流中提取文本列。
cut語(yǔ)法
[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [root@www ~]# cut -c 字符區(qū)間 <==用于排列整齊的信息 選項(xiàng)與參數(shù): -d :后面接分隔字符。與 -f 一起使用; -f :依據(jù) -d 的分隔字符將一段信息分割成為數(shù)段,用 -f 取出第幾段的意思; -c :以字符 (characters) 的單位取出固定字符區(qū)間;
PATH 變量如下
[root@www ~]# echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games # 1 | 2 | 3 | 4 | 5 | 6 | 7
將 PATH 變量取出,我要找出第五個(gè)路徑。
#echo $PATH | cut -d ':' -f 5 /usr/local/bin
將 PATH 變量取出,我要找出第三和第五個(gè)路徑。
#echo $PATH | cut -d ':' -f 3,5 /sbin:/usr/local/bin
將 PATH 變量取出,我要找出第三到最后一個(gè)路徑。
echo $PATH | cut -d ':' -f 3- /sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
將 PATH 變量取出,我要找出第一到第三個(gè)路徑。
#echo $PATH | cut -d ':' -f 1-3 /bin:/usr/bin:/sbin:
將 PATH 變量取出,我要找出第一到第三,還有第五個(gè)路徑。
echo $PATH | cut -d ':' -f 1-3,5 /bin:/usr/bin:/sbin:/usr/local/bin
實(shí)用例子:只顯示/etc/passwd的用戶和shell
#cat /etc/passwd | cut -d ':' -f 1,7 root:/bin/bash daemon:/bin/sh bin:/bin/sh
統(tǒng)計(jì)文件里面有多少單詞,多少行,多少字符。
wc語(yǔ)法
[root@www ~]# wc [-lwm] 選項(xiàng)與參數(shù): -l :僅列出行; -w :僅列出多少字(英文單字); -m :多少字符;
默認(rèn)使用wc統(tǒng)計(jì)/etc/passwd
#wc /etc/passwd 40 45 1719 /etc/passwd
40是行數(shù),45是單詞數(shù),1719是字節(jié)數(shù)
wc的命令比較簡(jiǎn)單使用,每個(gè)參數(shù)使用如下:
#wc -l /etc/passwd #統(tǒng)計(jì)行數(shù),在對(duì)記錄數(shù)時(shí),很常用 40 /etc/passwd #表示系統(tǒng)有40個(gè)賬戶 #wc -w /etc/passwd #統(tǒng)計(jì)單詞出現(xiàn)次數(shù) 45 /etc/passwd #wc -m /etc/passwd #統(tǒng)計(jì)文件的字節(jié)數(shù) 1719
原文:https://www.cnblogs.com/ggjucheng/archive/2013/01/13/2858385.html
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。