對於全部的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。html
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 import socket 5 6 def handle_request(client): 7 buf = client.recv(1024) #獲取客戶端發過來的數據 8 client.send("HTTP/1.1 200 OK\r\n\r\n") 9 client.send("Hello, Seven") 10 11 def main(): 12 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #建立一個socket服務端對象 13 sock.bind(('localhost',8000)) #監聽8000端口 14 sock.listen(5) #最多5個鏈接 15 16 while True: #一直在等待鏈接 17 connection, address = sock.accept() #若是有鏈接,就會獲取到值 18 handle_request(connection) #獲取到值以後調用handle_request處理 19 connection.close() #處理完成這個請求後斷開此次鏈接 20 21 if __name__ == '__main__': 22 main()
全部web框架的本質就是這20幾行代碼
python標準庫提供的獨立WSGI服務器稱爲wsgiref。python
1 #!/usr/bin/env python 2 #coding:utf-8 3 4 from wsgiref.simple_server import make_server 5 6 def RunServer(environ, start_response):
#environ 客戶端發來的全部數據
#start_response 封裝要返回給用戶的數據(響應頭、狀態之類的)
7 start_response('200 OK', [('Content-Type', 'text/html')])
8 return '<h1>Hello, web!</h1>'
#返回的內容
python3中:
#return ['<h1>Hello, web!</h1>'.encode('utf-8')](返回的是列表形式)
10 if __name__ == '__main__': 11 httpd = make_server('', 8000, RunServer) 12 print "Serving HTTP on port 8000..." 13 httpd.serve_forever()
#查看請求,經過pycharm斷點
web框架定義好後,全部用戶來訪問都是返回的同一個內容,經過請求中的內容(url)區分,返回不一樣的內容web
MVC數據庫
Model view Controller瀏覽器
數據庫 模板文件 業務處理服務器
MTV框架
Model Template Controllersocket
數據庫 模板文件 業務處理url
區別就是文件夾名字的區別,處理過程是同樣的spa