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

1、web應用程序

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

2、bs、cs架構

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

3、本身寫一個web應用,並實現動態頁面

知識補充:html

  靜態頁面&動態頁面python

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

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

import socket

server = socket.socket()

# server.bind(('127.0.0.1', 8080))
server.bind(('192.168.43.99', 8081))
server.listen(5)

while True:
    conn, addr = server.accept()
    # 接收瀏覽器傳過來的數據
    data = conn.recv(1024)
    print(data)
    # 返回給瀏覽器數據(不符合http協議)
    # conn.send(b'hello world')
    # (1)返回數據符合http協議
    # conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world')

    #(2) 返回符合html格式的數據
    # 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>

4、http協議

具體參照博客:  linux

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

    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  請求地址:/lqz/handsome   協議:http   版本:1.1版本
GET /lqz/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
    統一資源定位符是能夠從互聯網上訪問資源的一種方式,協議就是資源的地址
相關文章
相關標籤/搜索