目錄
所有的web應用本質上就是乙個socket服務端,而使用者的瀏覽器就是乙個socket客戶端,基於請求做出響應,客戶都先請求,服務端做出對應的響應,按照http協議的請求協議傳送請求,服務端按照http協議的響應協議來響應請求,這樣的網路通訊,我們就可以自己實現web框架了。
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8896))
server.listen(5)
while 1:
# http請求是一次請求一次響應,在返回資料之後,關閉鏈結就可以了
conn, addr = server.accept()
from_client_data = conn.recv(1024)
# 獲取瀏覽器訪問的路徑
path = from_client_data.decode('utf8').split()[1]
# 按照http協議規定的方式返回訊息
# '/'代表的是根路徑,就是ip位址後面沒有寫訪問路徑
if path == '/':
# 開啟html檔案,以rb的形式讀取出來
with open('test.html', 'rb')as f:
# 讀取的html檔案
data = f.read()
# 如果訪問的是css檔案路徑,將css檔案讀取出來
elif path == '/style.css':
with open('style.css', 'rb')as f:
data = f.read()
# 如果訪問的是js檔案,將js的檔案讀取出來
elif path == '/test.js':
with open('test.js', 'rb')as f:
data = f.read()
#將獲取的檔案傳送給客戶端
conn.send(data)
conn.close()
'''1:通過瀏覽器訪問上面socket**中設定的ip位址和埠就能獲取到html頁面的內容
2:我們的css,js**單獨寫在乙個檔案中的,當我們吧html頁面傳送給瀏覽器的時候,瀏覽器對html頁面進行渲染,渲染的時候讀取html中有匯入的css檔案和js檔案,就會再次向server端傳送請求
# 客戶端通過根路徑訪問時,服務端返回html頁面
def home(conn):
with open('test.html', 'r', encoding='utf-8')as f:
new = str(time.time())
s = f.read()
#將獲取的動態時間替換掉html頁面中的時間,達到動態返回頁面的效果
s = s.replace('$$xx$$', new)
conn.send(s.encode('utf-8'))
conn.close()
# 當客戶端通過css路徑訪問的時候,服務端返回css檔案
def style(conn):
with open('style.css', 'rb')as f:
conn.send(f.read())
conn.close()
# 當客戶端通過js路徑訪問的時候,服務端返回css檔案
def index(conn):
with open('test.js', 'rb')as f:
conn.send(f.read())
conn.close()
# 當客戶端通過請求索要的時候,服務端返回
def png(conn):
with open('1.png','rb')as f:
conn.send(f.read())
conn.close()
# 當客戶端傳送請求索要,ico檔案的時候,返回ioc檔案
def ico(conn):
with open('wechat.ico','rb')as f:
print('333')
conn.send(f.read())
conn.close()
def ind(conn):
with open('index.html','rb')as f:
print('333')
conn.send(f.read())
conn.close()
#定義乙個路徑和檔案的對應列表,節省**,
urllist=[(b'/',home),(b'/style.css',style),(b'/test.js',index),(b'/wechat.ico',ico),(b'/index',ind)]
while 1:
server = socket.socket()
server.bind(('127.0.0.1',8896))
server.listen(5)
conn,addr=server.accept()
#獲取請求路徑
path=conn.recv(1024).split()[1]
print(path)
func=none
for url in urllist:
if path==url[0]:
p=thread(target=url[1],args=(conn,))
p.start()
初識web框架django
一 初識web框架 手擼乙個web框架的總結 1 web框架的本質 socket服務端與瀏覽器的通訊 2 socket服務端功能劃分 a.負責與瀏覽器收發訊息 socket通訊 wsgiref uwsgi gunicorn b.根據使用者訪問的不同路徑執行不同的函式 自己寫c.從html中讀取內容,...
初識MVC框架
什麼是mvc?剛開始聽到mvc這個詞的時候,對其茫無所知,通過近期的學習,對其有所了解。mvc全名是model view controller,是模型 model 檢視 view 控制器 controller 的縮寫,一種軟體設計典範,用一種業務邏輯 資料 介面顯示分離的方法組織 將業務邏輯聚集到乙...
Java EE spring框架初識
spring 框架的簡介 解決方案 spring 的核心是依賴注入和控制反轉。依賴注入,正常類a依賴類b,如果在類a的物件a中要使用類b的物件b,需要在a中new,依賴注入就是,框架來建立a和b物件,將b注入到a中,框架接管了這個以來物件的建立工作,並且把其 b 注入到需要他的a中。控制反轉,建立物...