• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 01. 初識Django

    標簽: django、drf  django

    一、web應用

    1、web應用

    web應用就是一種可以通過web訪問的應用程序
    #1、優點:
    	- 不需要客戶端,只需要一個適用的瀏覽器;
        - 更新直接在服務端更新,客戶端感知不到;
        - web應用程序通常耗費很少的用戶硬盤空間,或者一點都不耗費;
        - 網絡應用程序和服務器端的網絡產品都很容易結合,如email功能和搜索功能;
        - 跨平臺性好;
    #2、缺點:
    	- 強調瀏覽器的使用性,如果瀏覽器方你沒有提供特定的功能,或者棄用特定的平臺或者操作系統版本導致不適用,就會影響到大量用戶
        - 網絡連接出問題時,應用將不能正常使用
        - 許多web程序是不開源的,只能依賴第三方提供的服務,因此不能針對用戶定制化、個性化,大部分情況下也不能離線使用,因而損失了很多靈活性
        - 完全依賴應用服務商的可及性。如果公司倒閉,服務器停止使用,用戶將無法追索以前的資料
        - 用戶的數據都保存在軟件廠商那邊,公司理論上可以檢索任何的用戶行為,可能會引起隱私安全問題
    

    2、bs、cs架構

    1 bs:瀏覽器----服務端(本質上還是cs)
    2 cs:客戶端----服務端
    
    • 優點:
    - 采用Internet上標準的通信協議作為客戶機同服務器通信的協議,這樣可以使位于Internet任意位置的人都能夠正常訪問服務器; 對于服務器來說,通過相應的Web服務和數據庫服務可以對數據進行處理。對外采用標準的通信協議,以便共享數據。
    - 在服務器上對數據進行處理,就處理的結果生成網頁,以方便客戶端直接下載
    - 在客戶機上對數據的處理被進一步簡化,將瀏覽器作為客戶端的應用程序,以實現對數據的顯示
    
    • 總結:
    瀏覽器本質上是一個socket客戶端,服務器是一個socket服務端
    

    二、基于socket寫一個web應用

    客戶端是瀏覽器,服務端自己寫
    - 靜態頁面:
    	靜態的html,內容不會改變,每次訪問看到的數據都一樣
    - 動態頁面:頁面的數據會發生變化,每次訪問看到的可能都不一樣(數據來源可能是數據庫)
    

    1、main.py

    import socket
    
    server = socket.socket()
    server.bind(('127.0.0.1', 8080))
    server.listen(5)
    while True:
        conn, addr = server.accept()
        data = conn.recv(1024)
        print(data)
        # conn.send(b'hello world!')
        # 返回數據符合http協議
        # conn.send(b'HTTP/1.1 200 ok \r\n\r\n hello world')
        # 返回一個符合HTML格式的數據(windows默認使用的是gbk編碼)
        # conn.send('HTTP/1.1 200 ok \r\n\r\n <h1>我是標題</h1>'.encode('gbk'))
    
        # 返回一個html頁面,打開文件,轉成二進制,發出去
        # with open('index.html', 'r', encoding='utf-8') as f:
        #     data = f.read()
        # response = f'HTTP/1.1 200 ok \r\n\r\n {data}'
        # conn.send(response.encode('utf-8'))
    
        # 實現動態頁面,在index.html中寫一個特殊標記,使用python的變量去替換這個特殊標記
        import time
    
        ctime = time.strftime('%Y-%m-%d %X')
        with open('index.html', 'r', encoding='utf-8') as f:
            data = f.read().replace('{{time}}', str(ctime))
        response = f'HTTP/1.1 200 ok \r\n\r\n {data}'
        conn.send(response.encode('utf-8'))
    
        conn.close()  # 連接是一次性的
    

    2、index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            img {
                width: 300px;
                height: 260px;
            }
            p {
                color: purple;
                font-size: 40px;
            }
        </style>
    </head>
    <body>
    <p>{{time}}</p>
    <hr>
    <img src="https://tse2-mm.cn.bing.net/th/id/OIP.TqnFY_-E89YGubN1BrAkMAHaHa?pid=Api&rs=1" alt="圖片飛向了外太空">
    </body>
    </html>
    

    3、http協議

    1、http協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用于萬維網服務器與本地瀏覽器之間傳輸超文本的傳送協議
    2、應用層的協議
    3、http協議特性(*****):
    	-1)基于tcp/ip協議之上的應用層協議
        -2)基于“請求-響應”模式 ——(HTTP協議規定,請求從客戶端發出,最后服務器響應 該請求并返回。就是說,服務器端在沒有接收到請求之前不會發送響應)
        -3)無狀態保存 ——(HTTP協議自身不對請求和響應之間的通信狀態進行保存,也就是說在HTTP這個級別,協議對于發送過的請求或者響應都不做持久化處理)
        -4)無連接 —— (限制每次連接只處理一個請求,服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接;節省傳輸時間)
    

    4、請求協議(瀏覽器發出來的)

    請求格式:

    image-20200924172250257 image-20200924172316497
    三部分:請求首行,請求頭,請求體
    # GET請求:
    '''
    # 請求首行(以第一個\r\n\區分的)
    # 請求方式:GET  請求地址:/cc/aaa/bbb  協議:http  版本:1.1版本
    GET /cc/aaa/bbb 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  
    # (下面的是請求體的內容)
    '''
    
    #POST請求:
    '''
    # 請求首行
    POST /?name=lqz&age=18 HTTP/1.1\r\n
    # 請求頭
    Host: 127.0.0.1:8008\r\n
    Connection: keep-alive\r\n
    Content-Length: 21\r\n
    Cache-Control: max-age=0\r\n
    Origin: http://127.0.0.1:8008\r\n
    Upgrade-Insecure-Requests: 1\r\n
    Content-Type: application/x-www-form-urlencoded\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\n
    Referer: http://127.0.0.1:8008/?name=lqz&age=18\r\n
    Accept-Encoding: gzip, deflate, br\r\n
    Accept-Language: zh-CN,zh;q=0.9\r\n
    Cookie: csrftoken=7xx6BxQDJ6KB0PM7qS8uTA892ACtooNbnnF4LDwlYk1Y7S7nTS81FBqwruizHsxF\r\n\r\n
    # 請求體
    name=lqz&password=123'
    '''
    

    請求方式:get與post請求

    • GET提交的數據會放在URL后面,以?分割URL和傳輸數據,參數之間以&連接,如EditBook?name=test1&id=123456
    • POST方法是把提交的數據放在HTTP包的請求體中
    • GET提交的數據大小有限制(因為瀏覽器對url的長度有限制),而POST方法提交的數據沒有限制
    • GET與POST請求在服務端獲取請求數據的方式不同

    5、響應協議

    響應格式

    image-20200924172428894 image-20200924172443165
    '''
    # 響應首行  響應協議和版本:HTTP/1.1  響應的狀態碼和標志:200 ok
    HTTP/1.1 200 ok \r\n
    #響應頭(key:value形式)
    key:value
    key:value
    \r\n\r\n
    #響應體:在瀏覽器里看到的東西(瀏覽器能把下面的html渲染成好看的樣子)
    <!DOCTYPE html>
    <html lang="en">
    <h1>hello</h1>
    </html>
    '''
    

    6、響應狀態碼

    狀態碼的值,是當客戶端向服務器端發送請求時,返回的請求結果
    借助狀態碼,可以用戶可以知道服務器端是正常處理了請求,還是出現了問題。
    狀態碼如200 ok,3位數字和原因組成,第一位數字指定了響應類別,有5種。
    
    image-20200924172516228

    四、URL簡介

    統一資源定位符,是對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。
    互聯網上的每個資源都有一個唯一的URL,它包含的信息指出文件的位置 以及瀏覽器應該怎么去處理它
    
    • 格式:
    協議名稱://IP:端口號(默認是80/路徑?name=cc&sex=male
    # ?之前的是請求路徑,  ?之后的是請求數據部分
    #示例:
    http://127.0.0.1:8080/order.html
    ftp://xxx          
    
    

    五、web框架

    web框架是一種開發框架,用來支持動態網站、網絡應用和網絡服務的開發。
    大多數的web框架提供了一套開發和部署網站的方式,也為web行為提供了一套通用的方法。
    web框架已將實現了很多功能,開發人員使用框架提供的方法并完成自己的業務邏輯就能快速的開發web應用了。
    瀏覽器和服務器之前是基于HTTP協議進行通信的,也可說web框架就是在socket通信的代碼基礎上擴展出來的,有很多簡單方便實用的方法,大大提高了開發的效率
    
    

    1、wsgiref模塊

    最簡單的web應用是把HTML用文件保存好,用一個現成的HTTP服務器軟件,接受用戶請求,從文件中讀取HTML,返回
    底層代碼由專門的服務器軟件實現,我們用python專注于生成HTML文檔,因為我們不希望接觸到TCP連接、HTTP原始請求和響應格式,所以,需要一個統一的接口協議來實現這樣的服務器軟件,讓我們專心用Python編寫Web業務。這個接口就是WSGI:Web Server Gateway Interface。而wsgiref模塊就是python基于wsgi協議開發的服務模塊。
    

    基于wsgiref寫一個web框架

    1、socket自己寫的,借助于一個模塊,已經實現了socket
    2、wsgiref:Django默認使用的
    3、在web框架上繼續開發
    	- 路徑都去urls.py中寫
        - 路徑匹配以后執行的函數,都放在views.py中
        - 數據庫相關操作,都在models.py中
    

    ① models.py

    from wsgiref.simple_server import make_server
    
    
    def server(environ, start_response):  # 必須傳兩個參數
        # environ:是一個字典,http拆解出字典,請求方式、請求地址、請求頭
        # start_response:響應對象,響應狀態碼,響應頭放到里面
        start_response("200 ok", [('Content -Type', 'text/html')])
        if environ.get('PATH_INFO') == '/index':  # 請求地址
            data = '我是index頁面'.encode('utf-8')
    
        elif environ.get('PATH_INFO') == '/login':
            data = '我是login頁面'.encode('utf-8')
        else:
            data = b'<h1>Hello, web!</h1>'
        return [data]
    
    
    if __name__ == '__main__':
        # app是可調用對象,可以加括號執行(函數內存地址)
        myserver = make_server('127.0.0.1', 8081, server)  # 只要客戶端發送一次請求,就會調用server()
        myserver.serve_forever()  # 服務起來了,就相當于用listen一直監聽8081端口
    

    login.html 和 index.py文件省略

    六、Django與其他web框架的區別

    # 1、python中主流的web框架:
    Django、flask、tornado(性能高)、sanic、fastapi...
    
    web框架socket路由的映射關系模板渲染
    自己寫的web框架使用的第三方:wsgiref自己寫的自己寫的
    Django使用的第三方:wsgiref自己寫的自己寫的
    flask用了第三方自己寫的用的第三方
    tornado自己寫自己寫的自己寫的
    版權聲明:本文為weixin_49111957原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_49111957/article/details/109753922

    智能推薦

    用Django全棧開發——01. 安裝虛擬環境

    大家好,我是皮爺,很多人都會好奇,學習了Python能干嘛?今天,我將給大家通過一個Django項目,從零開始來給大家講一個很系統的Django教程。該Django課程。包括了Django安裝,Django是什么,從虛擬環境的搭建到前端開發,Django中間件的開發,從后端CMS系統的創建最后部署到阿里云線上服務器。整個流程統統都有,而且每一篇文章都有源碼供大家查看參考。 最終的效果,有條件的,可...

    01. Maven簡介

    Maven簡介 Maven是一個項目管理和綜合工具。Maven提供了開發人員構建一個完整的生命周期框架。開發團隊可以自動完成項目的基礎工具建設,Maven使用標準的目錄結構和默認構建生命周期。 在多個開發團隊一起工作時,Maven可以按照標準設置在非常短的時間里完成配置工作。由于大部分項目的設置都很簡單,并且可以重復使用,Maven讓開發人員的工作更輕松,同事創建報表、檢查、構建和測試自動化設置。...

    01. Linux操作

    文章目錄 操作系統Linux Linux基礎知識 1. Linux 的概述 2. Linux 的歷史 3. Linux系統的應用 3.1 服務器系統 3.2 嵌入式系統 3.3 桌面應用系統 3.4 移動手持系統 4. Linux 的版本 4.1 Linux的主流版本 Linux的使用 1. 安裝 VmWare 2. CentOS 的安裝 3. Linux 的目錄結構 4. Linux 的常用命令...

    01.【Word基礎】

    1.常見符號 回車符(Enter)段落標記 換行符(shift + Enterface) 制表符(Tab) 分隔符。頁面布局-分隔符。 符號顯示與隱藏。 文件-選項-顯示。 開始選項卡-顯示與隱藏 2. 文本選擇 自由選擇:鼠標拖拽 詞語選擇:雙擊 一句話選擇:(Ctrl +單擊) 一段話選擇:段前雙擊 全文選擇:ctrl + a 3. 參考文獻格式 個位數字文獻:懸掛2個字符 兩位數文獻:懸掛2...

    01.【MyBatis框架】

    1. 前提 什么是框架 它是我們軟件開發中的一套解決方案,不同的框架解決的是不同的問題。 使用框架的好處:框架封裝了很多的細節,使開發者可以使用極簡的方式實現功能。大大提高開發效率。 三層架構 表現層:是用于展示數據的 業務層:是處理業務需求 持久層:是和數據庫交互的 持久層技術解決方案 JDBC技術:Connection、PreparedStatement、ResultSet Spring的Jd...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡