python在web可以开发吗_Python Web开发
參考原文
WSGI接口
WSGI(Web Server Gateway Interface)是一個(gè)接口,用來(lái)屏蔽底部的細(xì)節(jié)(如TCP的建立連接,HTTP原始請(qǐng)求和響應(yīng)格式等)。WSGI接口定義非常簡(jiǎn)單,只需要Web開(kāi)發(fā)者實(shí)現(xiàn)一個(gè)函數(shù),就可以響應(yīng)客戶端的HTTP請(qǐng)求。
這個(gè)函數(shù)有兩個(gè)參數(shù):environ:包含所有的HTTTP請(qǐng)求的dict對(duì)象;start_response:一個(gè)發(fā)送HTTP響應(yīng)的函數(shù)。
這兩個(gè)參數(shù),我們是沒(méi)有辦法提供的,是需要符合WSGI規(guī)范的服務(wù)器來(lái)提供的。
Python內(nèi)置了一個(gè)WSGI服務(wù)器,這個(gè)模塊就wsgiref,是用純Python編寫的,不考慮任何的運(yùn)行效率,僅供開(kāi)發(fā)和測(cè)試使用。接下來(lái),我們就來(lái)實(shí)現(xiàn)一個(gè)基本的響應(yīng)請(qǐng)求的處理。
首先,編寫hello.py,用于實(shí)現(xiàn)Web應(yīng)用程序的WSGI處理函數(shù):
#hello.py
defapplication(environ, start_response):#返回響應(yīng)的首部
start_response('200 OK',[('Content-Type', 'text/html')])#返回響應(yīng)的主體
return [b'
Hello,world
']
再編寫一個(gè)server.py,用于啟動(dòng)WSGI服務(wù)器,加載application()函數(shù):
#server.py#導(dǎo)入響應(yīng)的模塊函數(shù):
from wsgiref.simple_server importmake_server#導(dǎo)入先前編寫的application函數(shù):
from hello importapplication#創(chuàng)建一個(gè)服務(wù)器,IP地址為空,渡口是8000,處理函數(shù)是application
httpd = make_server('', 8000, application)print('Serving HTTP on port 8000...')#開(kāi)始監(jiān)聽(tīng)HTTP請(qǐng)求:
httpd.serve_forever()
在終端運(yùn)行server.py,并在瀏覽器輸入地址:localhost:8000,效果如下圖:
在命令行可以看到wsgiref打印的log:
我們也可以根據(jù)environ里的參數(shù)信息,來(lái)生成動(dòng)態(tài)的HTML。
總結(jié):無(wú)論多么復(fù)雜的Web應(yīng)用程序,入口都是一個(gè)WSGI處理函數(shù)。HTTP請(qǐng)求的所有輸入信息都可以通過(guò)environ獲得,HTTP響應(yīng)的輸出都可以通過(guò)start_response()加上函數(shù)返回值作為Body。
使用Web框架
了解了WSGI框架,我們發(fā)現(xiàn):其實(shí)一個(gè)WebAPP,就是一個(gè)WSGI的處理函數(shù),針對(duì)每個(gè)HTTP請(qǐng)求進(jìn)行響應(yīng)。但是WSGI抽象程度還是比較低,我們可以使用Web框架來(lái)實(shí)現(xiàn)WebAPP。
Python中的Web框架非常多,我們先直接選擇一個(gè)比較流行的Web框架——Flask來(lái)使用。
首先使用pip(Python包管理工具)來(lái)安裝Flask:
sudo apt install python-pip #安裝pip
pip install flask#安裝flask
然后編寫一個(gè)app.py,處理3個(gè)URL請(qǐng)求,分別是
GET / : 首頁(yè),返回Home頁(yè)
GET /signin : 登陸頁(yè),顯示登陸表單,用于用戶登陸
POST /signin : 處理用戶輸入的登陸表單,返回登陸結(jié)果
Flask通過(guò)Python的裝飾器在內(nèi)部自動(dòng)地把URL和函數(shù)給關(guān)聯(lián)起來(lái),所以我們寫出的代碼應(yīng)該這樣:
from flask importFlaskfrom flask importrequest
app= Flask(__name__)
@app.route('/', methods=['GET', 'POST'])defhome():return '
Home
'@app.route('/signin', methods=['GET'])defsignin_form():return ''' '''@app.route('/signin', methods=['POST'])defsignin():if request.form['username'] =='admin' and request.form['password'] =='password':return 'Hello,admmin!
'return '
Bad username or password!
'if __name__ == '__main__':
app.run()
View Code
運(yùn)行python app.py,Flask自帶的server在端口5000上監(jiān)聽(tīng):
打開(kāi)瀏覽器,輸入首頁(yè)地址:http://localhost:5000/
繼續(xù)輸入http://localhost:5000/signin:
輸入預(yù)設(shè)的用戶名admin和密碼password,登錄成功:
輸入錯(cuò)誤的信息:
總結(jié)
以上是生活随笔為你收集整理的python在web可以开发吗_Python Web开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python桌面程序开发_程序员之路:p
- 下一篇: python中匿名函数的作用_什么是Py