Django——WEB應用程序(手寫程序),HTTP協議,BS CS架構


一、web應用程序

1 what:用瀏覽器訪問的應用程序
2 優點:
    -不需要客戶端
    -更新直接在服務端更新,客戶端感知不到
    -跨平台性好(注意:go語言是跨平台編譯)
    ps:平台編譯 比如:可以在win平台編譯出linux下的可執行文件
3 缺點:
    -強調瀏覽器的適用性(即兼容性)
    -用戶的數據都保存在軟件廠商那邊
    

二、bs、cs架構

1 bs:瀏覽器---服務端   (本質還是cs)  web開發是bs架構
2 cs:客戶端---服務端

注意:瀏覽器發出去的請求都符合http協議

三、自己寫一個web應用,並實現動態頁面

知識補充:

  靜態頁面&動態頁面

  #靜態頁面:靜態的html,內容不會改變,每次訪問看到的數據都一樣
  #動態頁面:頁面的數據會發生變化,每次訪問看到的可能都不一樣(數據來源可能是數據庫)

客戶端是瀏覽器,服務端自己寫(python)
#main.py
# 1 寫一個web應用的服務端,通過瀏覽器(客戶端),來訪問

import socket

server = socket.socket()

# server.bind(('127.0.0.1', 8080)) #在符合http協議的情況下,在瀏覽器輸入127.0.0.1:8080就可以獲取數據
server.bind(('192.168.43.75', 8081))
server.listen(5)

while True:
    conn, addr = server.accept()
    # 接收瀏覽器傳過來的數據
    data = conn.recv(1024)
    print(data)
    # 返回給瀏覽器數據(不符合http協議,所以會返回發送的響應無效)
    # conn.send(b'hello world')
# (1)返回數據符合http協議,瀏覽器就能識別了,返回hello world # conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world') #(2) 返回符合html格式的數據 #如果title是中文就會亂碼需要修改編碼 # conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>title</h1>'.encode('utf-8')) # (3)返回一個html頁面,打開文件,轉成二進制,send一下 # with open('index.html','r',encoding='utf-8') as f: # data1=f.read() #把返回的數據拼起來 # response='HTTP/1.1 200 ok \r\n\r\n %s'%data1 # conn.send(response.encode('utf-8')) ## (4)實現動態頁面(靜態頁面,動態頁面) # 在index.html中寫一個特殊標記,使用python的變量去替換這個特殊標記 import time ctime=time.time() # 可能是數據庫查詢出來的 with open('index.html','r',encoding='utf-8') as f: data1=f.read().replace('{{time}}',str(ctime)) response='HTTP/1.1 200 ok \r\n\r\n %s'%data1 conn.send(response.encode('utf-8')) conn.close() #index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {{time}} <br> <br> <img height="100" width="100" src="a.jpg" alt=""> </body> </html>

四、http協議

具體參照博客:  

    HTTP協議之請求方法,響應頭信息,狀態碼

    https://www.cnblogs.com/guojieying/p/13651818.html

1 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網服務器與本地瀏覽器之間傳輸超文本的傳送協議
2 應用層的協議
3 http協議特性(記一下)
    -1 基於tcp/ip之上的應用層協議
    -2 基於請求-響應模式
    -3 無狀態保存
    -4 無連接



4  請求協議(瀏覽器發出來的)(記住)
三部分:請求首行,請求頭,請求體

'''
# 請求首行(以第一個\r\n區分的),
# 請求首行里有請求方式:GET  請求地址:/lili/handsome   協議:http   版本:1.1版本
GET /lili/handsome HTTP/1.1\r\n

# 請求頭(key:value形式)
Host: 192.168.11.211:8080\r\n
Connection: keep-alive\r\n
Cache-Control: max-age=0\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n\r\n'

# \r\n\r\n  下面的是請求體的內容

'''


5 響應協議

'''
# 響應首行  響應協議和版本:HTTP/1.1  響應的狀態碼和標志:200 ok  
HTTP/1.1 200 ok \r\
# 響應頭(key:value形式)
key:value
key:valu
\r\n\r\n
# 響應體:在瀏覽器里看到的東西(瀏覽器能把下面的html渲染成好看的樣子)

<!DOCTYPE html>
<html lang="en">
<h1>hello</h1>
</html>
'''

6 響應狀態碼
    -1xx:請求正在處理(用戶一般看不到)        
    -2xx:請求成功(200-3xx:重定向(301  302)訪問一個地址,轉到另一個地址
    -4xx:客戶端錯誤(404,403-5xx:服務端錯誤(5027 url:統一資源定位符
    # 格式
    http://127.0.0.1:8080/order.html
    ftp://xxx
    協議://IP:端口(80)/路徑?name=lqz&age=18
    統一資源定位符是可以從互聯網上訪問資源的一種方式,協議就是資源的地址

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM