99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀不容易!找到一個python的超簡易網(wǎng)站搭建神器
不容易!找到一個python的超簡易網(wǎng)站搭建神器
2022-08-11
收藏

作者: 清香客

來源:Python 技術

相信很多學習python的醬友們,大部分和我一樣是為了提升工作效率,但是在提升自己的工作效率時,也會想著做同樣工作的同事能不能也用上自己寫的腳本(視工作環(huán)境而定)。

但是對于沒有接觸過編程的同事來說,環(huán)境的搭建就會讓人崩潰,更別說是不同的電腦系統(tǒng)了??墒窃趺醋霾拍芊奖?、快速的讓同事也能用呢?我想來想去,還是搭建一個網(wǎng)站是最方便的,直接瀏覽器打開就可以用。網(wǎng)上查了查pythonweb框架很多,但是學習成本很高(要涉及前端、后端和css知識),學習時間會很長,讓新手望而卻步。

終于功夫不負有心人,讓我找到一個快速搭建網(wǎng)站的pythonpywebio,這個框架可以方便的和flask、Django等web框架結合,一些簡單的收集表什么的用它很方便、快捷,而且它的代碼和python很相似,學習成本也很低。

pywebio很方便的就可以創(chuàng)建一個網(wǎng)站(用本機也行,云端服務器也行),啟動之后就可以直接用瀏覽器瀏覽了。如圖是我自己寫的一個簡易的網(wǎng)站,只是自己和同事用的,可以快速處理業(yè)務,提升我們的效率,利人利已。而且搭建的時間很短,從學習到搭建,一天我就搭建好了(大佬們應該只要一小時不到就能搭建好),剩下的只是完善功能的時間了。

頁面展示

我的網(wǎng)站效果展示

是不是看著有點簡陋,沒有華麗的界面。因為pywebio是自動排版的,也不需要你去涉及前后端的知識,我們要的是實用的功能,醬友們就不要糾結排版什么的了,畢竟好用才是真理。

同時醬友們可也以打開我的網(wǎng)站去看看(我的網(wǎng)站),除了第一個選項,后面的選項都可以操作看看 ,因為第一個需要登錄才可以操作,可以讓你們看看第一個選項里面的功能列表(左上角有顯示請求成功)。

準備

首先安裝庫

pip install pywebio

安裝之后會有版本的提示,因為我已經(jīng)安裝過了,會有一些不同

然后是導入需要的模塊

from pywebio import start_serverfrom pywebio.input import *from pywebio.output import *from pywebio.pin import *from pywebio.session import *

說一下各模塊的作用

start_server是用來啟動服務器的

input是輸入的模塊組,輸入的功能在這個里面

output是輸出的模塊組,輸出的功能在這個里面

pin是一個持續(xù)輸入的功能模塊,因為pywebio是一個阻塞式的輸入,所以需要持續(xù)輸入的時候需要用pin函數(shù)來實現(xiàn),官方文檔里是這樣說的:

個人理解:醬友們在學習的時候可以先把一些教程的代碼復制過來,然后通過一系列的修改,把它改成自己能理解的形式,這樣可以吃透代碼的各個功能,有助于學習。

session這個函數(shù)是一個會話功能

各功能模塊

網(wǎng)站LOGO(一個網(wǎng)站怎么能沒有自己的LOGO呢)

img用來存儲圖標文件,再用put_image輸出到網(wǎng)頁上,如下圖:

剛開始寫的時候,沒有寫更新日志什么的,后來感覺寫個有助于自己記一些東西,就后來加上了,我直接加在了LOGO的下面。

put_collapse是一個可以折疊的文本顯示函數(shù),用with循環(huán)讀取,可以折疊起來,省下屏幕空間,用的時候再展開。

radio列表功能選項,把所需要的功能以列表的形式展示出來

注意看:紅框里的列表和下面的if選項是對應的。

列表對應好之后就是具體的功能實現(xiàn)了。

actions按鈕功能

file_upload上傳文件和put_file下載文件功能

put_text單文本輸出函數(shù)

input輸入函數(shù)

put_processbar、set_processbar進度條函數(shù)

put_processbarset_processbar這兩個是一對,上面用來標記進度條的位置,下面用來輸出進度條的進度,在這里提醒一下需要注意的地方,進度條命名的時候最好不要和同功能的進度條命名一樣,要不然會造成進度條的混亂,會出現(xiàn)好多進度條或者是就出現(xiàn)同一個。還有就是進度條設置成自動消失,必須要到頭了才會消失,要不然不會消失(別問我怎么知道,踩好多坑了)所以設置進度條的動態(tài)數(shù)值的時候最好是設置的大一點。

運行

start_server(main, port=8088, debug=False, auto_open_webbrowser=False)

第一個參數(shù)是要運行的主函數(shù),port是網(wǎng)站端口,可以自己設置;后面的可以省略

debug是調試用的,設置為True的時候,只要你改動了代碼,保存的時候會自動重啟服務器

auto_open_webbrowser是自動打開瀏覽器,設置為True,啟動服務器就自動用瀏覽器打開這個網(wǎng)址了

醬友們可能會問:你介紹了這么多,也沒說怎么用???那是因為官方文檔寫的很詳細,還有代碼示例,醬友們可以自己去看一下(可能比我理解的更透徹喲)。官方文檔:

左上角紅框那里還可以搜索自己想要了解的功能,幾乎是全中文的喲。


總結

這里有個注意點:pywebio有個明顯的缺點是沒有返回上一頁的功能,也可能是我能力不夠,沒有找到。當然也可以自己去寫一個返回上一頁的功能,我感覺直接用跳出循環(huán)來達到目的(已經(jīng)測試過,用按鈕循環(huán)的可以跳出,列表循環(huán)的就不能跳出),醬友們有好的方法可以留言或加入交流群討論呀。

好了,今天的文章就寫到這了,怎么樣?是不是很方便、快捷?

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調,回調的第一個參數(shù)驗證碼對象,之后可以使用它調用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }