純手寫web框架
.py
#你可以將web框架理解成服務端
import socket
server=socket.socket() #TCP 三次握手 osi七層
server.bind(('127.0.0.1',8081)) #IP協議 乙太網協議 arp協議
server.listen(5) #池。。。
while True:
conn,addr=server.accept()#等待監聽
data=conn.recv(1024)
print(data)
#回了兩次,直接忽略favicon.ico
data=data.decode('utf-8') #將二進位制轉為字串
conn.send(b'HTTP/1.1 200 OK\r\n\r\n') #遵循http協議
current_path=data.split(' ')[1] #想拿到路徑,根據空格進行切分取索引[1]的位置就是路徑
# print(current_path)
if current_path=='/index': #不同路徑傳送不同效果
# conn.send(b'index heiheihei')
with open(r'01 myhtml.html','rb')as f:
conn.send(f.read())
elif current_path=='/login':
conn.send(b'login')
else:
conn.send(b'hello web')
conn.close() #關閉
將二進位制轉為字串:
data=date.decode('utf-8')
myhtml.html:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>你好呀 齊老師^V^ </h1> </body> </html>
基於wsgiref模組:
import wsgiref def run(env,response): """ :param env:是請求相關的所有資料 :param response:響應相關的所有資料 :return:返回給瀏覽器的資料 """ print(env) #大字典 wsgiref模組幫你處理好了http的格式 #從env中取值 current_path=env.get('PATH_INFO')#拿到當前使用者輸入的物件路徑 if current_path=='/index': return [b'index'] elif current_path=='/login': return [b'login'] return [b'404 error'] response('200 OK',[])#響應首行響應頭 return[b'hello wsgiref'] if __name__=='__main__': server=make_server('127.0.0.1',8080,run) """ 會實時監聽127.0.0.1:8080地址,只要有客戶來了 都會交給run函式處理(加括號出發run函式的執行) flask啟動程式碼 make_server('127.0.0.1,8080,obj) __call__物件加()會執行它的call方法 """ server.server_forever()