1. 程式人生 > >Web應用、HTTP協議及Django安裝

Web應用、HTTP協議及Django安裝

Web應用程式

​ Web應用程式是一種可以通過Web訪問的應用程式,程式的最大好處是使用者很容易訪問應用程式,使用者只需要有瀏覽器即可,不需要再安裝其他軟體

應用程式有兩種模式C/S、B/S。C/S是客戶端/伺服器端程式,也就是說這類程式一般獨立執行。而B/S就是瀏覽器端/伺服器端應用程式,這類應用程式一般藉助IE等瀏覽器來執行。WEB應用程式一般是B/S模式。Web應用程式首先是“應用程式”,和用標準的程式語言,如C、C++等編寫出來的程式沒有什麼本質上的不同。然而Web應用程式又有自己獨特的地方,就是它是基於Web的,而不是採用傳統方法執行的。換句話說,它是典型的瀏覽器/伺服器架構的產物。

B/S架構優點

​ 瀏覽器/伺服器架構(Browser/Server,簡稱B/S)能夠很好地應用在廣域網上,成為越來越多的企業的選擇。瀏覽器/伺服器架構相對於其他幾種應用程式體系結構,有如下3方面的優點:

  • 這種架構採用Internet上標準的通訊協議(通常是TCP/IP協議)作為客戶機同伺服器通訊的協議。這樣可以使位於Internet任意位置的人都能夠正常訪問伺服器。對於伺服器來說,通過相應的Web服務和資料庫服務可以對資料進行處理。對外採用標準的通訊協議,以便共享資料。
  • 在伺服器上對資料進行處理,就處理的結果生成網頁,以方便客戶端直接下載。
  • 在客戶機上對資料的處理被進一步簡化,將瀏覽器作為客戶端的應用程式,以實現對資料的顯示。不再需要為客戶端單獨編寫和安裝其他型別的應用程式。這樣,在客戶端只需要安裝一套內建瀏覽器的作業系統,直接安裝一套瀏覽器,就可以實現伺服器上資料的訪問。而瀏覽器是計算機的標準裝置

本質上:瀏覽器是一個socket客戶端,伺服器是一個socket服務端**

基於Socket的一個Web應用

import socket

def server_run():
    soc = socket.socket()
    soc.bind(('127.0.0.1', 8008))
    soc.listen(5)
    while True:
        conn, addr = soc.accept()
        recv_data = conn.recv(1024)
        print(recv_data)
        # 1 直接在send裡寫,傳送給客戶端
        # conn.send(b'HTTP/1.1 200 OK\r\n\r\n<h1>hello web</h1><img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg"></img>')
        #2 開啟一個html檔案,傳送給客戶端
        # with open('index.html','r',encoding='utf-8') as f:
        #     data=f.read()
        # conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
        # 3 動態網頁,字串替換
        import time
        now=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        print(now)
        with open('index.html','r',encoding='utf-8') as f:
            data=f.read()
        data=data.replace('@@@',now)
        conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
        conn.close()

if __name__ == '__main__':
    server_run()
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h2>@@@</h2>

<img src="https://gss2.bdstatic.com/9fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike92%2C5%2C5%2C92%2C30/sign=5e3814acf9edab64607f4592965fc4a6/14ce36d3d539b600c0c465d0eb50352ac65cb74b.jpg" alt="">
</body>
</html>

一個簡單的Web框架

https://www.cnblogs.com/liuqingzheng/articles/9509785.html


HTTP協議

HTTP協議簡介

​ HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於全球資訊網(WWW:World Wide Web )伺服器與本地瀏覽器之間傳輸超文字的傳送協議。

​ HTTP是一個屬於應用層的面向物件的協議,由於其簡捷、快速的方式,適用於分散式超媒體資訊系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴充套件。HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端即WEB伺服器傳送所有請求。Web伺服器根據接收到的請求後,向客戶端傳送響應資訊。

HTTP協議特性

1.基於TCP/IP協議之上的應用層協議

2.基於請求-響應模式

​ HTTP協議規定,請求從客戶端發出,最後伺服器端響應該請求並 返回。換句話說,肯定是先從客戶端開始建立通訊的,伺服器端在沒有 接收到請求之前不會發送響應

3.無儲存狀態

​ HTTP是一種不儲存狀態,即無狀態(stateless)協議。HTTP協議 自身不對請求和響應之間的通訊狀態進行儲存。也就是說在HTTP這個 級別,協議對於傳送過的請求或響應都不做持久化處理。使用HTTP協議,每當有新的請求傳送時,就會有對應的新響應產生。協議本身並不保留之前一切的請求或響應報文的資訊。這是為了更快地處理大量事務,確保協議的可伸縮性,而特意把HTTP協議設計成如此簡單的。

4.無連線

​ 無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。

http請求協議與響應協議

​ http協議包含由瀏覽器傳送資料到伺服器需要遵循的請求協議與伺服器傳送資料到瀏覽器需要遵循的請求協議。用於HTTP協議互動的信被為HTTP報文。請求端(客戶端)的HTTP報文
做請求報文,響應端(伺服器端)的 做響應報文。HTTP報文字身是由多行資料構成的字文字。

請求協議

​ 請求格式

​ 請求方式: get與post請求

  • GET提交的資料會放在URL之後,以?分割URL和傳輸資料,引數之間以&相連,如EditBook?name=test1&id=123456. POST方法是把提交的資料放在HTTP包的請求體中.
  • GET提交的資料大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的資料沒有限制.
  • GET與POST請求在服務端獲取請求資料方式不同。
 GET請求
    # 請求首行
    GET / HTTP/1.1\r\n
    # get請求後面的引數
    GET /?name=lqz&age=18 HTTP/1.1\r\n
    # 請求頭
    Host: 127.0.0.1:8008\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 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\n
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nAccept-Encoding: gzip, deflate, br\r\n
    Accept-Language: zh-CN,zh;q=0.9\r\n
    Cookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n'
    # 請求體(get請求,請求體為空)    
    '''
    '''
    POST請求
    # 請求首行
    POST /?name=lqz&age=18 HTTP/1.1\r\n
    # 請求頭
    Host: 127.0.0.1:8008\r\nConnection: keep-alive\r\nContent-Length: 21\r\nCache-Control: max-age=0\r\nOrigin: http://127.0.0.1:8008\r\nUpgrade-Insecure-Requests: 1\r\nContent-Type: application/x-www-form-urlencoded\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\nReferer: http://127.0.0.1:8008/?name=lqz&age=18\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9\r\nCookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n
    # 請求體
    name=lqz&password=123'
    
響應協議

​ 響應格式


​ 響應狀態碼
狀態碼是客戶端向伺服器傳送請求後返回的請求結果

Django下載和基本命令

下載:

​ 方式一:在命令列輸入:pip3 install django

    pip install django==1.11.9 -i http://pypi.hustunique.org/simple 指定版本號,指定國內映象

  方式二:用pycharm安裝

  方式三:用pycharm的Terminal的命令列安裝

使用:

​ 命令建立專案:django-admin startproject 專案名字
​ 建立app:python3 manage.py startapp app01

檔案目錄介紹:

​ -manage.py---專案入口,執行一些命令
​ -專案名
​ -settings:全域性配置資訊
​ -urls:總路由,請求地址跟檢視函式的對映關係
​ -app名字
​ -migrations:資料庫遷移的記錄
​ -models.py 資料庫表模型
​ -views 檢視函式

執行專案:

​ pytyon3 manage.py runserver 127.0.0.1:8001

補充:

    1 decode和encode
        data = b'111111'
        data = str(data, encoding='utf-8')
        print(type(data))
        data = bytes(data, encoding='utf-8')
        print(type(data))
    2 pymysql連結資料庫
        #拿到資料庫連結
        conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', db='django', password='admin')
        #獲得遊標,並且查詢結果資料是字典格式
        cur=conn.cursor(pymysql.cursors.DictCursor)
        #執行sql
        cur.execute('select * from user')
        #獲取全部查詢結果
        dic=cur.fetchall()