Python廖雪峯html
WSGI(Web Server Gateway Interface)是一個接口,用來屏蔽底部的細節(如TCP的創建鏈接,HTTP原始請求和響應格式等)。WSGI接口定義很是簡單,只須要Web開發者實現一個函數,就能夠響應客戶端的HTTP請求。python
這個函數有兩個參數:environ:包含全部的HTTTP請求的dict對象;start_response:一個發送HTTP響應的函數。flask
這兩個參數,咱們是沒有辦法提供的,是須要符合WSGI規範的服務器來提供的。瀏覽器
Python內置了一個WSGI服務器,這個模塊就wsgiref,是用純Python編寫的,不考慮任何的運行效率,僅供開發和測試使用。接下來,咱們就來實現一個基本的響應請求的處理。服務器
首先,編寫hello.py,用於實現Web應用程序的WSGI處理函數:app
#hello.py def application(environ, start_response): #返回響應的首部 start_response('200 OK',[('Content-Type', 'text/html')]) #返回響應的主體 return [b'<h1>Hello,world<h1>']
再編寫一個server.py,用於啓動WSGI服務器,加載application()函數:框架
#server.py #導入響應的模塊函數: from wsgiref.simple_server import make_server #導入先前編寫的application函數: from hello import application #建立一個服務器,IP地址爲空,渡口是8000,處理函數是application httpd = make_server('', 8000, application) print('Serving HTTP on port 8000...') #開始監聽HTTP請求: httpd.serve_forever()
在終端運行server.py,並在瀏覽器輸入地址:localhost:8000,效果以下圖:ide
在命令行能夠看到wsgiref打印的log:函數
咱們也能夠根據environ裏的參數信息,來生成動態的HTML。工具
總結:不管多麼複雜的Web應用程序,入口都是一個WSGI處理函數。HTTP請求的全部輸入信息均可以經過environ得到,HTTP響應的輸出均可以經過start_response()加上函數返回值做爲Body。
瞭解了WSGI框架,咱們發現:其實一個WebAPP,就是一個WSGI的處理函數,針對每一個HTTP請求進行響應。可是WSGI抽象程度仍是比較低,咱們可使用Web框架來實現WebAPP。
Python中的Web框架很是多,咱們先直接選擇一個比較流行的Web框架——Flask來使用。
首先使用pip(Python包管理工具)來安裝Flask:
sudo apt install python-pip #安裝pip pip install flask #安裝flask
而後編寫一個app.py,處理3個URL請求,分別是
Flask經過Python的裝飾器在內部自動地把URL和函數給關聯起來,因此咱們寫出的代碼應該這樣:
from flask import Flask from flask import request app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def home(): return '<h1>Home</h1>' @app.route('/signin', methods=['GET']) def signin_form(): return '''<form action="/signin" method="post"> <p><input name="username" type="text"></p> <p><input name="password" type="password"></p> <p><input type="submit" value="Sign In"></p> </form> ''' @app.route('/signin', methods=['POST']) def signin(): if request.form['username'] =='admin' and request.form['password'] =='password': return '<h3>Hello,admmin!</h3>' return '<h3>Bad username or password!</h3>' if __name__ == '__main__': app.run()
運行python app.py,Flask自帶的server在端口5000上監聽:
打開瀏覽器,輸入首頁地址:http://localhost:5000/
繼續輸入http://localhost:5000/signin:
輸入預設的用戶名admin和密碼password,登陸成功:
輸入錯誤的信息: