Python学习笔记:web开发1
前言
最近在學習深度學習,已經跑出了幾個模型,但Pyhton的基礎不夠扎實,因此,開始補習Python了,大家都推薦廖雪峰的課程,因此,開始了學習,但光學有沒有用,還要和大家討論一下,因此,寫下這些帖子,廖雪峰的課程連接在這里:廖雪峰
Python的相關介紹,以及它的歷史故事和運行機制,可以參見這篇:python介紹
Python的安裝可以參見這篇:Python安裝
Python的運行模式以及輸入輸出可以參見這篇:Python IO
Python的基礎概念介紹,可以參見這篇:Python 基礎
Python字符串和編碼的介紹,可以參見這篇:Python字符串與編碼
Python基本數據結構:list和tuple介紹,可以參見這篇:Python list和tuple
Python控制語句介紹:ifelse,可以參見這篇:Python 條件判斷
Python控制語句介紹:循環實現,可以參見這篇:Python循環語句
Python數據結構:dict和set介紹Python數據結構dict和set
Python函數相關:Python函數
Python高階特性:Python高級特性
Python高階函數:Python高階函數
Python匿名函數:Python匿名函數
Python裝飾器:Python裝飾器
Python偏函數:Python偏函數
Python模塊:Python模塊
Python面向對象編程(1):Python面向對象
Python面向對象編程(2):Python面向對象(2)
Python面向對象編程(3):Python面向對象(3)
Python面向對象編程(4):Pyhton面向對象(4)
Python面向對象高級編程(上):Python面向對象高級編程(上)
Python面向對象高級編程(中上):Python面向對象高級編程(中上)
Python面向對象高級編程(中下):Python面向對象高級編程(中下)
Python面向對象高級編程(完):Python面向對象高級編程(完)
Python錯誤調試(起):Python調試:起
Python錯誤調試(承):Python調試:承
Python錯誤調試(轉):Python調試:轉
Python錯誤調試(合):python調試:合
Python文件IO編程:Python文件IO
Python文件IO編程2:Python文件IO2
Python文件IO編程3:PYthon文件IO3
Python進程和線程(起):Python進程和線程起
Python進程和線程(承):Python進程和線程承
Python進程和線程(轉):Python進程和線程轉
Python進程和線程(合):Python進程和線程合
Python正則表達式:Python正則表達式
Python學習筆記:常用內建模塊1:Python學習筆記:常用內建模塊1
Python學習筆記:常用內建模塊2:Python學習筆記:常用內建模塊2
Python學習筆記:常用內建模塊3:Python學習筆記:常用內建模塊3
Python學習筆記:常用內建模塊4:Python學習筆記: 常用內建模塊4
Python學習筆記:常用內建模塊5:Python學習筆記: 常用內建模塊5
Python學習筆記:常用內建模塊6:Python學習筆記:常用內建模塊6
Python學習筆記:第三方模塊1:Python常用第三方模塊
Python學習筆記:第三方模塊2:Python常用第三方模塊
Python學習筆記:第三方模塊3:Python常用第三方模塊
Pytho學習筆記:網絡編程:Python網絡編程
Python學習筆記:電子郵件:Python電子郵件1
Python學習筆記:SMTP服務器:PythonSMTP服務器
Python學習筆記:POP3服務器:PythonPOP3服務器
Python學習筆記:Python數據庫 Python數據庫1
Python學習筆記:Python數據庫2Python數據庫2
目錄
- 前言
- 目錄
- web開發
- HTTP協議
web開發
最早的軟件都是運行在大型機上的,軟件使用者通過“啞終端”登陸到大型機上去運行軟件。后來隨著PC機的興起,軟件開始主要運行在桌面上,而數據庫這樣的軟件運行在服務器端,這種Client/Server模式簡稱CS架構。
隨著互聯網的興起,人們發現,CS架構不適合Web,最大的原因是Web應用程序的修改和升級非常迅速,而CS架構需要每個客戶端逐個升級桌面App,因此,Browser/Server模式開始流行,簡稱BS架構。
在BS架構下,客戶端只需要瀏覽器,應用程序的邏輯和數據都存儲在服務器端。瀏覽器只需要請求服務器,獲取Web頁面,并把Web頁面展示給用戶即可。
當然,Web頁面也具有極強的交互性。由于Web頁面是用HTML編寫的,而HTML具備超強的表現力,并且,服務器端升級后,客戶端無需任何部署就可以使用到新的版本,因此,BS架構迅速流行起來。
今天,除了重量級的軟件如Office,Photoshop等,大部分軟件都以Web形式提供。比如,新浪提供的新聞、博客、微博等服務,均是Web應用。
Web應用開發可以說是目前軟件開發中最重要的部分。Web開發也經歷了好幾個階段:
靜態Web頁面:由文本編輯器直接編輯并生成靜態的HTML頁面,如果要修改Web頁面的內容,就需要再次編輯HTML源文件,早期的互聯網Web頁面就是靜態的;CGI:由于靜態Web頁面無法與用戶交互,比如用戶填寫了一個注冊表單,靜態Web頁面就無法處理。要處理用戶發送的動態數據,出現了Common Gateway Interface,簡稱CGI,用C/C++編寫。ASP/JSP/PHP:由于Web應用特點是修改頻繁,用C/C++這樣的低級語言非常不適合Web開發,而腳本語言由于開發效率高,與HTML結合緊密,因此,迅速取代了CGI模式。ASP是微軟推出的用VBScript腳本編程的Web開發技術,而JSP用Java來編寫腳本,PHP本身則是開源的腳本語言。MVC:為了解決直接用腳本語言嵌入HTML導致的可維護性差的問題,Web應用也引入了Model-View-Controller的模式,來簡化Web開發。ASP發展為ASP.Net,JSP和PHP也有一大堆MVC框架。目前,Web開發技術仍在快速發展中,異步開發、新的MVVM前端技術層出不窮。
Python的誕生歷史比Web還要早,由于Python是一種解釋型的腳本語言,開發效率高,所以非常適合用來做Web開發。
Python有上百種Web開發框架,有很多成熟的模板技術,選擇Python開發Web應用,不但開發效率高,而且運行速度快。
本章我們會詳細討論Python Web開發技術。
HTTP協議
在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,所以:
HTML是一種用來定義網頁的文本,會HTML,就可以編寫網頁;HTTP是在網絡上傳輸HTML的協議,用于瀏覽器和服務器的通信。在舉例子之前,我們需要安裝Google的Chrome瀏覽器。
為什么要使用Chrome瀏覽器而不是IE呢?因為IE實在是太慢了,并且,IE對于開發和調試Web應用程序完全是一點用也沒有。
我們需要在瀏覽器很方便地調試我們的Web應用,而Chrome提供了一套完整地調試工具,非常適合Web開發。
安裝好Chrome瀏覽器后,打開Chrome,在菜單中選擇“視圖”,“開發者”,“開發者工具”,就可以顯示開發者工具:
Elements顯示網頁的結構,Network顯示瀏覽器和服務器的通信。我們點Network,確保第一個小紅燈亮著,Chrome就會記錄所有瀏覽器和服務器之間的通信:
當我們在地址欄輸入www.sina.com.cn時,瀏覽器將顯示新浪的首頁。在這個過程中,瀏覽器都干了哪些事情呢?通過Network的記錄,我們就可以知道。在Network中,定位到第一條記錄,點擊,右側將顯示Request Headers,點擊右側的view source,我們就可以看到瀏覽器發給新浪服務器的請求:
sina-http-request
最主要的頭兩行分析如下,第一行:
GET / HTTP/1.1
GET表示一個讀取請求,將從服務器獲得網頁數據,/表示URL的路徑,URL總是以/開頭,/就表示首頁,最后的HTTP/1.1指示采用的HTTP協議版本是1.1。目前HTTP協議的版本就是1.1,但是大部分服務器也支持1.0版本,主要區別在于1.1版本允許多個HTTP請求復用一個TCP連接,以加快傳輸速度。
從第二行開始,每一行都類似于Xxx: abcdefg:
Host: www.sina.com.cn
表示請求的域名是www.sina.com.cn。如果一臺服務器有多個網站,服務器就需要通過Host來區分瀏覽器請求的是哪個網站。
繼續往下找到Response Headers,點擊view source,顯示服務器返回的原始響應數據:
HTTP響應分為Header和Body兩部分(Body是可選項),我們在Network中看到的Header最重要的幾行如下:
200 OK200表示一個成功的響應,后面的OK是說明。失敗的響應有404 Not Found:網頁不存在,500 Internal Server Error:服務器內部出錯,等等。
Content-Type指示響應的內容,這里是text/html表示HTML網頁。請注意,瀏覽器就是依靠Content-Type來判斷響應的內容是網頁還是圖片,是視頻還是音樂。瀏覽器并不靠URL來判斷響應的內容,所以,即使URL是http://example.com/abc.jpg,它也不一定就是圖片。
HTTP響應的Body就是HTML源碼,我們在菜單欄選擇“視圖”,“開發者”,“查看網頁源碼”就可以在瀏覽器中直接查看HTML源碼:
當瀏覽器讀取到新浪首頁的HTML源碼后,它會解析HTML,顯示頁面,然后,根據HTML里面的各種鏈接,再發送HTTP請求給新浪服務器,拿到相應的圖片、視頻、Flash、JavaScript腳本、CSS等各種資源,最終顯示出一個完整的頁面。所以我們在Network下面能看到很多額外的HTTP請求。
HTTP請求
跟蹤了新浪的首頁,我們來總結一下HTTP請求的流程:
步驟1:瀏覽器首先向服務器發送HTTP請求,請求包括:
方法:GET還是POST,GET僅請求資源,POST會附帶用戶數據;
路徑:/full/url/path;
域名:由Host頭指定:Host: www.sina.com.cn
以及其他相關的Header;
如果是POST,那么請求還包括一個Body,包含用戶數據。
步驟2:服務器向瀏覽器返回HTTP響應,響應包括:
響應代碼:200表示成功,3xx表示重定向,4xx表示客戶端發送的請求有錯誤,5xx表示服務器端處理時發生了錯誤;
響應類型:由Content-Type指定;
以及其他相關的Header;
通常服務器的HTTP響應會攜帶內容,也就是有一個Body,包含響應的內容,網頁的HTML源碼就在Body中。
步驟3:如果瀏覽器還需要繼續向服務器請求其他資源,比如圖片,就再次發出HTTP請求,重復步驟1、2。
Web采用的HTTP協議采用了非常簡單的請求-響應模式,從而大大簡化了開發。當我們編寫一個頁面時,我們只需要在HTTP請求中把HTML發送出去,不需要考慮如何附帶圖片、視頻等,瀏覽器如果需要請求圖片和視頻,它會發送另一個HTTP請求,因此,一個HTTP請求只處理一個資源。
HTTP協議同時具備極強的擴展性,雖然瀏覽器請求的是http://www.sina.com.cn/的首頁,但是新浪在HTML中可以鏈入其他服務器的資源,比如,從而將請求壓力分散到各個服務器上,并且,一個站點可以鏈接到其他站點,無數個站點互相鏈接起來,就形成了World Wide Web,簡稱WWW。
HTTP格式
每個HTTP請求和響應都遵循相同的格式,一個HTTP包含Header和Body兩部分,其中Body是可選的。
HTTP協議是一種文本協議,所以,它的格式也非常簡單。HTTP GET請求的格式:
GET /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3每個Header一行一個,換行符是\r\n。
HTTP POST請求的格式:
POST /path HTTP/1.1 Header1: Value1 Header2: Value2 Header3: Value3body data goes here...當遇到連續兩個\r\n時,Header部分結束,后面的數據全部是Body。
HTTP響應的格式:
200 OK Header1: Value1 Header2: Value2 Header3: Value3body data goes here...HTTP響應如果包含body,也是通過\r\n\r\n來分隔的。請再次注意,Body的數據類型由Content-Type頭來確定,如果是網頁,Body就是文本,如果是圖片,Body就是圖片的二進制數據。
當存在Content-Encoding時,Body數據是被壓縮的,最常見的壓縮方式是gzip,所以,看到Content-Encoding: gzip時,需要將Body數據先解壓縮,才能得到真正的數據。壓縮的目的在于減少Body的大小,加快網絡傳輸。
要詳細了解HTTP協議,推薦“HTTP: The Definitive Guide”一書,非常不錯,有中文譯本:
HTTP權威指南
總結
以上是生活随笔為你收集整理的Python学习笔记:web开发1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php接收post参数乱码,学习猿地-p
- 下一篇: Python学习笔记:web开发2