日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python中cgi到底是什么_十分钟搞懂什么是CGI(转)

發(fā)布時(shí)間:2025/3/20 python 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中cgi到底是什么_十分钟搞懂什么是CGI(转) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文:CGI Made Really Easy,在翻譯的過(guò)程中,我增加了一些我在學(xué)習(xí)過(guò)程中找到的更合適的資料,和自己的一些理解。不能算是嚴(yán)格的翻譯文章,應(yīng)該算是我的看這篇文章的過(guò)程的隨筆吧。

CGI真的很簡(jiǎn)單

在此之前,你或許聽說(shuō)過(guò)很多說(shuō)CGI‘晦澀難懂’的言論。如果你會(huì)寫最基本的輸入輸出,那么你就可以寫出一個(gè)CGI腳本。如果你已經(jīng)是一個(gè)程序員,你只需要幾分整就可以明白CGI到底是個(gè)什么東西。如果你還不是一個(gè)名程序員,對(duì)不起這篇文章不是很適合你,你可以先去學(xué)習(xí)一些編程的知識(shí),例如腳本語(yǔ)言或者shell編程。但你學(xué)完了這些,再回過(guò)頭來(lái)看!那么讓我們開始吧!

這篇文章是寫一個(gè)CGI腳本用于處理HTML提交的表單。雖然跳過(guò)了一些細(xì)節(jié),但是可以讓你在短時(shí)間內(nèi)搞明白。

什么是CGI?

CGI不是一門編程語(yǔ)言。它是網(wǎng)頁(yè)的表單和你寫的程序之間通信的一種協(xié)議??梢杂萌魏握Z(yǔ)言寫一個(gè)CGI腳本,這些語(yǔ)言只要能接收輸入輸出信息,讀取環(huán)境變量。所以,幾乎所有的編程語(yǔ)言都能寫一個(gè)CGI腳本,例如:python(把我大python放在第一個(gè)!),C,甚至是shell腳本。

CGI腳本的結(jié)構(gòu)

典型的CGI腳本做了如下的事情:

讀取用戶提交表單的信息。

處理這些信息(也就是實(shí)現(xiàn)業(yè)務(wù))。

輸出,返回html響應(yīng)(返回處理完的數(shù)據(jù))。

下面主要解釋,第一步和最后一步

讀取用戶提交的表單

當(dāng)用戶填寫完表單,點(diǎn)擊提交按鈕的時(shí)候。CGI腳本接收用戶表單的數(shù)據(jù),這些數(shù)據(jù)都是k-v的集合的形式(也就是python中的字典)。這里有寫實(shí)現(xiàn)的例子:python

如果你已經(jīng)通過(guò)上面的例子看懂了,下面的就可以忽略了。如果你還有些不懂請(qǐng)看下面來(lái)那兩個(gè)長(zhǎng)的字符串。

“name1=value1&name2=value2&name3=value3”

"name1=value1;name2=value2;name3=value3"

區(qū)別就是:‘&’和‘;’這兩個(gè)符號(hào),他們的作用都是分隔參數(shù)。下面還有兩件事情要做。

把所有的‘+’變成‘空格’

把所有的符號(hào)都轉(zhuǎn)譯成‘%xx’樣式的符號(hào),例如:‘%3d’轉(zhuǎn)化成‘=’

這樣做是為了統(tǒng)一用戶的輸入,使用統(tǒng)一的URL-encoded進(jìn)行轉(zhuǎn)譯。

那么你從哪里得到這些轉(zhuǎn)譯完的字符串呢?根據(jù)提交時(shí)的時(shí)候選用的是什么HTTP方法:

POST方法,通過(guò)HTTP消息主體傳遞的。注意:POST方法編碼類型有:application/x-www-form-urlencoded 或 multipart/form-data。

我找了一個(gè)很好的資料,很短,一路了然:POST對(duì)比GET方法

總結(jié):CGI接收的用戶數(shù)據(jù),是通過(guò)http協(xié)議傳遞過(guò)來(lái)的。而選用不同的‘Method’:GET或POST對(duì)CGI的接收沒有任何影響。這段是讓你明白:數(shù)據(jù)是怎么通過(guò)http協(xié)議傳輸?shù)摹?/p>

發(fā)送響應(yīng)(Response)返回給用戶

首先,第一行要寫:Content-type: text/html

新起一行,用于輸出數(shù)據(jù)。寫好HTML響應(yīng)頁(yè)面。這個(gè)頁(yè)面是:當(dāng)你的腳本處理完數(shù)據(jù)后,返回給用戶的結(jié)果。

是的,你可以隨意編寫返回的HTML代碼。HTML很簡(jiǎn)單,而且方便。

我的總結(jié)

CGI是一種通信協(xié)議,它把用戶傳遞過(guò)來(lái)的數(shù)據(jù)轉(zhuǎn)變成一個(gè)k-v的字典。這個(gè)字典中不光有用戶的數(shù)據(jù),還有HTTP協(xié)議的參數(shù)。它做的就是把數(shù)據(jù),組織成一個(gè)固定結(jié)構(gòu)形式的數(shù)據(jù)。方便任何符合CGI協(xié)議的程序都可以調(diào)用!但是CGI不是負(fù)責(zé)通信(傳輸數(shù)據(jù))的,通信的話是通過(guò)socket,也就是server,例如上面例子中,是通過(guò)Apache進(jìn)行通信。之后調(diào)用CGI腳本,把數(shù)據(jù)轉(zhuǎn)變成符合CGI協(xié)議的數(shù)據(jù)結(jié)構(gòu),用于后面的數(shù)據(jù)處理!

這個(gè)系列文章完成后,后面還有一個(gè)實(shí)戰(zhàn)系列。從頭寫一個(gè)web服務(wù)器,敬請(qǐng)期待!

http://www.cnblogs.com/xueweihan/p/5319893.html

總結(jié)

以上是生活随笔為你收集整理的python中cgi到底是什么_十分钟搞懂什么是CGI(转)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。