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

熱線電話:13121318867

登錄
首頁精彩閱讀用 Python 寫的 web 頁面,如何讓所有人都能訪問?
用 Python 寫的 web 頁面,如何讓所有人都能訪問?
2021-11-08
收藏

來源:早起Python

作者:劉早起

大家好,我是早起。

本文將介紹如何在服務(wù)器上配置你的項目,以下教程基于小白視角講解,適用于任何Python腳本(爬蟲、web、數(shù)據(jù)分析、自動化等都行)

同步環(huán)境

其實整體思路就是,在本地開發(fā),然后在服務(wù)器配置和你本地一樣的環(huán)境,并將全部項目文件上傳到服務(wù)器,之后就像部署遠程 Jupyter Notebook 一樣,使用 nohup 命令將程序掛在后臺即可。

所以假設(shè)你現(xiàn)在已經(jīng)在本地寫好你的網(wǎng)站下面可以將你本地開發(fā)用到的庫整理到 requirements.txt 中(可以通過pip freeze > requirements.txt)并ssh連接上服務(wù)器之后,執(zhí)行下方命令

pip install -r requirements.txt 

但如果你在服務(wù)器上安裝了 anaconda 的話,更多情況下,只需要進入服務(wù)器執(zhí)行 pip install pywebio 即可。

現(xiàn)在,你的服務(wù)器開發(fā)環(huán)境就和本地一致了,下一步自然是將整個項目文件同步到服務(wù)器,使用 git 是比較方便的方法,使用命令行命令是常見的方法,但是對于大多數(shù)小白來說,通過 ftp 軟件點點可能更方便。

所以下面是在 mac 上使用 Termius 的同步文件過程(Windows 可以用 filezilla)首先打開軟件

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

點擊 sftp 并選擇一個服務(wù)器,之后輸入你的服務(wù)器賬號密碼進入你的服務(wù)器文件夾(默認root目錄下),然后創(chuàng)建一個新的文件夾用于你的項目

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

接下來只要雙擊進入你創(chuàng)建的文件夾,并將你本地的整個文件夾拖入,等待上傳完畢即可。

掛載程序

現(xiàn)在,你的服務(wù)器有和你本地一致的開發(fā)環(huán)境與完整的項目文件,下面讓我們把它啟動起來。

首先還是通過ssh工具連上服務(wù)器,之后cd進入剛剛的新建的目錄,比如我的文件夾名稱為aliyun,我的命令就是

cd aliyun

接下來同樣適用 nohup 啟動并將腳本掛在后臺執(zhí)行即可,例如我的腳本為 aliyun.py,我的命令就是

nohup python aliyun.py &

這樣就將該命令,掛在后臺執(zhí)行了,最后一步同樣是打開短端口,例如你在 PyWebIO 中使用的端口是 8888 就要去阿里云后臺防火墻/安全組開放這個端口

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

至此,你就可以通過你的公網(wǎng)IP:端口,訪問你的web項目,還有一個常見的問題,如何關(guān)閉這個端口/程序?

我們可以通過端口反查進程號

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

也可以根據(jù)命令查找進程pid(ps -ef|grep python

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

然后將對應的進程kill掉,并在修改完代碼后重新啟動即可,這些就屬于運維相關(guān)知識,網(wǎng)上資料很多,感興趣的可以自己查閱。

彩蛋 - 自定義頁腳

最近很多人問,怎么修改默認頁面中頁腳的顯示文字,或者去掉默認頁面的Powered by PyWebIO

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

就像我的頁面一樣,顯示早起Python,并且點擊跳轉(zhuǎn)到我設(shè)置好的頁面

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

其實稍微對web開發(fā)懂一點的,都會知道這是額外加入了html元素,既然沒有修改的命令,說明這個html肯定是寫死在某個文件夾中。

在mac下,我們可以打開anaconda安裝目錄,并根據(jù)下面的路徑中找到 index.html

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

之后使用任意代碼編輯器修改框中部分即可

用 Python 寫的 web 頁面,如何讓所有人都能訪問?

在 Windows 或者 centos 下也是類似,找到 pywebio 對應的目錄,修改對應文件即可,大家可以自己研究!

數(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(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 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); }