1. 程式人生 > >Web框架本質及Django例項

Web框架本質及Django例項

Web框架本質

我們可以這樣過理解:所有的Web應用本質上就是一個socket服務端,而使用者的瀏覽器就是一個socket客戶端。這樣我們就可以自己實現Web框架了。

 

半成品自定義web框架

import socket
ks = socket.socket()
ks.bind(('127.0.0.1',8080))
ks.listen()




while True:
    conn,addr = ks.accept()
    data = conn.recv(1024)
    conn.send(b'OK')
    conn.close()

可以說Web服務本質上都是在這十幾行程式碼的基礎上擴展出來的。

使用者給瀏覽器輸入網址,會給服務端傳送資料,那瀏覽器會發送什麼資料?怎麼發?這個誰來定?你的這個網站是這個規定,他那個網站按照他的那個規定,這樣網際網路就沒法玩了?

所以,必須有一個統一規定,讓大家傳送訊息、接收訊息的時候有個格式依據,不能隨便寫。

這個規則就是HTTP協議,以後瀏覽器傳送請求資訊也好,伺服器回覆響應也罷,都要按照這個規則來。

HTTP協議主要規定了客戶端和伺服器之間的通訊格式,那HTTP協議是怎麼規定訊息格式的呢?

讓我們首先列印下我們在服務端接收到的訊息是什麼。

import socket
ks = socket.socket()
ks.bind(('127.0.0.1
',8080)) ks.listen() while True: conn,addr = ks.accept() data = conn.recv(1024) #將瀏覽器發來的訊息打印出來 print(data) #jiang conn.send(b'OK') conn.close()

輸出:

b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8080\r\nConnection: keep-
alive\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 
(Windows NT 
10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp, image/apng,*/*;q=0.8\r\nDNT: 1\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=RKBXh1d3M97iz03Rpbojx1bR6mhHudhyX5PszUxxG3bOEwh1lxFpGOgWN9WN93ZH3zv\r\n\r\n'