Python的CGIHTTPServer交互實(shí)現(xiàn)詳解
介紹
對(duì)于服務(wù)器后端開發(fā)者而言,有時(shí)候需要把自己的一些服務(wù)直接暴露給PM或者其他RD使用,這個(gè)時(shí)候需要搭建一套web服務(wù)可以和前端用戶做簡(jiǎn)單交互,按照最常規(guī)的做法,一般是用Apache或者Nginx作為webserver后端使用cgi或者fcgi程序或者腳本進(jìn)行處理,當(dāng)然這種做法安全且正規(guī)。
但是我個(gè)人更喜歡一個(gè)更簡(jiǎn)單的做法:就是利用python自帶的CGIHTTPServer作為服務(wù)器,然后通過一個(gè)簡(jiǎn)單的html頁面進(jìn)行交互,通過post請(qǐng)求直接調(diào)用總控腳本,與用戶進(jìn)行交互。

使用方法和示例
啟動(dòng)服務(wù)
Python的CGIHTTPServer一般是與python一起安裝的,使用如下命令既可以啟動(dòng),為了便于組織目錄,建議先建立一個(gè)目錄,比如web,然后再運(yùn)行下面的命令。
nohup python -m CGIHTTPServer 8088 &
上面的命令使CGIHTTPServer在非中斷后臺(tái)運(yùn)行,運(yùn)行l(wèi)og可以通過當(dāng)前目錄下的nohup.out查看。
編寫交互頁面
在啟動(dòng)server的當(dāng)前目錄下,建立一個(gè)index.html文件,編寫內(nèi)容如下。
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gbk"> <title> Python-CGIHTTPServer使用示例 </title> <meta name="author" content="Haiyu"> <center><h1> Python-CGIHTTPServer使用示例 </h1></center> </head> <hr style="height:5px;border:none;border-top:5px ridge green;" /> <body> <br/> <center><h2>計(jì)算圓的周長(zhǎng)</h2></center> <center> <p>請(qǐng)輸入圓的半徑長(zhǎng)度.</p> <br/> <form action="cgi-bin/c_length.sh" method="post" enctype="text/plain" target="_blank"> radius:<input type="text" id="radius" name="radius" value=""/> <input type="submit" id="c_length" name="c_length" value="計(jì)算周長(zhǎng)"> </form> </center> <br/> <br/> <br/> </body> <hr style="height:5px;border:none;border-top:5px ridge green;" /> <br/> <br/> </html>
這個(gè)界面的功能非常簡(jiǎn)單,使用一個(gè)form表單接收用戶的提交的半徑參數(shù),然后計(jì)算完周長(zhǎng)之后進(jìn)行返回,使用post請(qǐng)求。
CGI腳本
這個(gè)才是我們后端開發(fā)同學(xué)最關(guān)心的內(nèi)容,這個(gè)腳本就是用來完成主要的邏輯操作進(jìn)行返回,因?yàn)槲覀兒蠖送瑢W(xué)關(guān)注更多的不是交互界面的華麗而是邏輯處理的正確性和嚴(yán)謹(jǐn)性,根據(jù)我的經(jīng)驗(yàn),后端不管多么復(fù)雜的處理流程,最終都可以用一個(gè)腳本包起來,根據(jù)輸入得到輸出,這里面的輸入就是我們用戶提交的參數(shù),輸出就是我們經(jīng)過層層處理之后需要返回的內(nèi)容。
這個(gè)腳本建議放在server運(yùn)行目錄下新建立的cgi-bin目錄中。
#!/bin/bash
mysql_bin=/home/work/mysql/bin/mysql
echo "Content-Type:text/html; Charset=gbk"
echo ""
echo "<br/>"
radius=0
c_length=0
if [[ "$REQUEST_METHOD" == "POST" ]];then
read vars
echo "$vars" | awk -F "=" '{print $2}' > temp
dos2unix temp
radius=`cat temp`
c_length=$(echo "scale=2;2*3.14*$radius" | bc)
echo "<br/>"
echo "<table border="5" cellpadding="10">"
echo "Userid Info:"
echo "<tr>"
echo "<td>半徑</td><td>周長(zhǎng)</td>"
echo "</tr>"
echo "<tr>"
echo "<td>"$radius"</td><td>"$c_length"</td>"
echo "</tr>"
echo "</table>"
fi
總結(jié)
以上就是使用Python的CGIHTTPServer進(jìn)行用戶交互的主要內(nèi)容,其優(yōu)點(diǎn)就是開發(fā)使用方便,讓后端同學(xué)能更加專注于業(yè)務(wù)邏輯處理相關(guān)的內(nèi)容。不足之處可能就是不夠正規(guī),使用有風(fēng)險(xiǎn),因?yàn)槭褂玫氖羌僀GI協(xié)議交互,記得之前排查過一個(gè)bash的cgi漏洞,使用起來可能會(huì)有風(fēng)險(xiǎn),因此這種方式更適合開發(fā)一套對(duì)內(nèi)使用的簡(jiǎn)易工具,不建議對(duì)外部用戶暴露。
- python創(chuàng)建ArcGIS shape文件的實(shí)現(xiàn)
- 利用arcgis的python讀取要素的X,Y方法
- 基于Python_腳本CGI、特點(diǎn)、應(yīng)用、開發(fā)環(huán)境(詳解)
- 在arcgis使用python腳本進(jìn)行字段計(jì)算時(shí)是如何解決中文問題的
- 使用FastCGI部署Python的Django應(yīng)用的教程
- 在IIS服務(wù)器上以CGI方式運(yùn)行Python腳本的教程
- Windows 配置Apache以便在瀏覽器中運(yùn)行Python script的CGI模式
- 使用python實(shí)現(xiàn)CGI環(huán)境搭建過程解析
相關(guān)文章
使用Python實(shí)現(xiàn)廣告點(diǎn)擊率預(yù)測(cè)
廣告點(diǎn)擊率是指有多少用戶點(diǎn)擊了您的廣告與有多少用戶查看了您的廣告的比率,本文主要為大家介紹了如何使用Python實(shí)現(xiàn)廣告點(diǎn)擊率預(yù)測(cè),感興趣的小伙伴可以了解下2023-10-10
python 實(shí)現(xiàn)圖與圖之間的間距調(diào)整subplots_adjust
這篇文章主要介紹了python 實(shí)現(xiàn)圖與圖之間的間距調(diào)整subplots_adjust,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05
python3 selenium 切換窗口的幾種方法小結(jié)
今天小編就為大家分享一篇python3 selenium 切換窗口的幾種方法小結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05
解決Python中由于logging模塊誤用導(dǎo)致的內(nèi)存泄露
這篇文章主要介紹了解決Python中由于logging模塊誤用導(dǎo)致的內(nèi)存泄露,針對(duì)由于過多的UDP連接所產(chǎn)生的問題,需要的朋友可以參考下2015-04-04
python 求10個(gè)數(shù)的平均數(shù)實(shí)例
今天小編就為大家分享一篇python 求10個(gè)數(shù)的平均數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
Django框架請(qǐng)求生命周期實(shí)現(xiàn)原理
這篇文章主要介紹了Django框架請(qǐng)求生命周期實(shí)現(xiàn)原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
Pytorch 使用 nii數(shù)據(jù)做輸入數(shù)據(jù)的操作
這篇文章主要介紹了Pytorch 使用 nii數(shù)據(jù)做輸入數(shù)據(jù)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05

