python學習點滴記錄-Day16-django

  • http協議
  • django

 

 


 

理論基礎-http協議

 

HTTP簡介

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。css

HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。html

HTTP是一個屬於應用層的面向對象的協議,因爲其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,通過幾年的使用與發展,獲得不斷地完善和擴展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的規範化工做正在進行之中,並且HTTP-NG(Next Generation of HTTP)的建議已經提出。前端

HTTP協議工做於客戶端-服務端架構爲上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。Web服務器根據接收到的請求後,向客戶端發送響應信息。python

 

HTTP特色

一、簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯繫的類型不一樣。linux

因爲HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。web

二、靈活:HTTP容許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。sql

3.無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。數據庫

4.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。django

缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。flask

HTTP請求協議

請求協議遵守如下格式:

請求首行;        // 請求方式 請求路徑 協議和版本,例如:GET /index.html HTTP/1.1
請求頭信息;      // 請求頭名稱:請求頭內容,即爲key:value格式,例如:Host:localhost
空行;           // 用來與請求體分隔開
請求體。         // GET沒有請求體,只有POST有請求體。

瀏覽器發送給服務器的內容就這個格式的,若是不是這個格式服務器將沒法解讀!在HTTP協議中,請求有不少請求方法,其中最爲經常使用的就是GETPOST

get請求

GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent    Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36 Accept image/webp,image/*,*/*;q=0.8 Referer http://www.imooc.com/ Accept-Encoding gzip, deflate, sdch Accept-Language zh-CN,zh;q=0.8

HTTP默認的請求方法就是GET
     * 沒有請求體
     * 數據量有限制!
     * GET請求數據會暴露在瀏覽器的地址欄中

GET請求經常使用的操做:
       1. 在瀏覽器的地址欄中直接給出URL,那麼就必定是GET請求
       2. 點擊頁面上的超連接也必定是GET請求
       3. 提交表單時,表單默認使用GET請求,但能夠設置爲POST

請求頭:

View Code

post請求

POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022) Content-Type:application/x-www-form-urlencoded Content-Length:40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

HTTP響應協議

 響應格式

通常狀況下,服務器接收並處理客戶端發過來的請求後會返回一個HTTP的響應消息。

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

http響應消息格式.jpg

例子

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT Content-Type: text/html; charset=UTF-8 <html> <head></head> <body> <!--body goes here--> </body> </html>
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。

第一行爲狀態行,(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok)

第二部分:消息報頭,用來講明客戶端要使用的一些附加信息

第二行和第三行爲消息報頭,
Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8

第三部分:空行,消息報頭後面的空行是必須的
第四部分:響應正文,服務器返回給客戶端的文本信息。

空行後面的html部分爲響應正文。

響應狀態碼

狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
1xx:指示信息--表示請求已接收,繼續處理 2xx:成功--表示請求已被成功接收、理解、接受 3xx:重定向--要完成請求必須進行更進一步的操做 4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現 5xx:服務器端錯誤--服務器未能實現合法的請求 常見狀態碼: OK //客戶端請求成功 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 Forbidden //服務器收到請求,可是拒絕提供服務 Not Found //請求資源不存在,eg:輸入了錯誤的URL Internal Server Error //服務器發生不可預期的錯誤 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

GET和POST請求的區別

GET請求

GET /books/?sex=man&name=Professional HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive 注意最後一行是空行 POST請求 POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley

一、GET提交,請求的數據會附在URL以後(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,多個參數用&鏈接;例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。若是數據是英文字母/數字,原樣發送,若是是空格,轉換爲+,若是是中文/其餘字符,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。

POST提交:把提交的數據放置在是HTTP包的包體中。上文示例中紅色字體標明的就是實際的傳輸數據

所以,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變。

二、傳輸數據的大小:首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。

而在實際開發中存在的限制主要有:

GET:特定瀏覽器和服務器對URL長度有限制,例如 IE對URL長度的限制是2083字節(2K+35)。對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系 統的支持。

所以對於GET提交時,傳輸數據就會受到URL長度的 限制。

POST:因爲不是經過URL傳值,理論上數據不受 限。但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置。

GET和POST的區別

    1. GET提交的數據會放在URL以後,以?分割URL和傳輸數據,參數之間以&相連,如EditPosts.aspx?name=test1&id=123456. POST方法是把提交的數據放在HTTP包的Body中.

    2. GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.

    3. GET方式須要使用Request.QueryString來取得變量的值,而POST方式經過Request.Form來獲取變量的值。

    4. GET方式提交數據,會帶來安全問題,好比一個登陸頁面,經過GET方式提交數據時,用戶名和密碼將出如今URL上,若是頁面能夠被緩存或者其餘人能夠訪問這臺機器,就能夠從歷史記錄得到該用戶的帳號和密碼.

    5.  


 

Django 

 原文摘自劉江:http://www.cnblogs.com/feixuelove1009/p/5823135.html

 

1、Django簡介

  百度百科:開放源代碼的Web應用框架,由Python語言編寫......

  重點:一個大而全的框架,啥都替你考慮好了。

1. web框架介紹

  具體介紹Django以前,必須先介紹WEB框架等概念。

  web框架: 別人已經設定好的一個web網站模板,你學習它的規則,而後「填空」或「修改」成你本身須要的樣子。

  通常web框架的架構是這樣的:

 

  其它基於python的web框架,如tornado、flask、webpy都是在這個範圍內進行增刪裁剪的。例如tornado用的是本身的異步非阻塞「wsgi」,flask則只提供了最精簡和基本的框架。Django則是直接使用了WSGI,並實現了大部分功能。

2. MVC/MTV介紹

  MVC百度百科:全名Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯彙集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不須要從新編寫業務邏輯。

  通俗解釋:一種文件的組織和管理形式!不要被縮寫嚇到了,這其實就是把不一樣類型的文件放到不一樣的目錄下的一種方法,而後取了個高大上的名字。固然,它帶來的好處有不少,好比先後端分離,鬆耦合等等,就不詳細說明了。       

  模型(model):定義數據庫相關的內容,通常放在models.py文件中。

  視圖(view):定義HTML等靜態網頁文件相關,也就是那些html、css、js等前端的東西。

  控制器(controller):定義業務邏輯相關,就是你的主要代碼。  

  MTV: 有些WEB框架以爲MVC的字面意思很彆扭,就給它改了一下。view再也不是HTML相關,而是主業務邏輯了,至關於控制器。html被放在Templates中,稱做模板,因而MVC就變成了MTV。這其實就是一個文字遊戲,和MVC本質上是同樣的,換了個名字和叫法而已,換湯不換藥。

3.Django的MTV模型組織

  目錄分開,就必須有機制將他們在內裏進行耦合。在Django中,urls、orm、static、settings等起着重要的做用。一個典型的業務流程是以下圖所示:

 

那麼咱們學Django學的是什麼?

1. 目錄結構規範

2. urls路由方式

3. settings配置

4. ORM操做

5. 模板渲染

6.其它

 

2、Django項目實例

1. 程序安裝

  python3.五、pip3及pycharm專業版自行安裝。

(1)安裝Django:

  這裏只介紹較爲簡單的pip3命令安裝方式。

  win+r,調出cmd,運行命令:pip3 install django,自動安裝Pypi提供的最新版本。

 

安裝完成後以下圖所示:

(2)配置系統環境

成功安裝Django後,在下圖中的路徑可找到django-admin.exe文件,將它加入操做系統環境變量中。這樣在之後的調用會比較方便。

運行:django-admin help,能看到下面的內容表示OK。

 2. 建立django項目

  在linux等命令行界面下,使用django提供的命令和vim也能進行項目開發。可是,這裏推薦使用pycharm這個目前最好的python開發IDE

,它功能強大,界面友好。(下面全部的操做都在pycharm中進行。)

  點擊:file-->new project,出現下面的對話框。

選擇Django欄目,輸入項目名稱,這裏採用國際慣例的mysite。選擇python解釋器版本,點擊create建立。

Django將自動生成下面的目錄結構:

與項目同名的目錄中是配置文件,templates目錄是html文件存放也就是MTV中的T。manage.py是django項目管理文件。

3. 建立APP

  在每一個django項目中能夠包含多個APP,至關於一個大型項目中的分系統、子模塊、功能部件等等,相互之間比較獨立,但也有聯繫。

全部的APP共享項目資源。

  在pycharm下方的terminal終端中輸入命令:

  python manage.py startapp cmdb

  這樣就建立了一個叫作cmdb的APP,django自動生成「cmdb」文件夾。

 

4. 編寫路由

  路由都在urls文件裏,它將瀏覽器輸入的url映射到相應的業務處理邏輯。

  簡單的urls編寫方法以下圖:

5. 編寫業務處理邏輯

  業務處理邏輯都在views.py文件裏。

  經過上面兩個步驟,咱們將index這個url指向了views裏的index()函數,它接收用戶請求,並返回一個「hello world」字符串。

6. 運行web服務

  如今咱們已經能夠將web服務運行起來了。

  命令行的方式是:python manage.py runserver 127.0.0.1:8000

  但在pycharm中,你能夠這麼幹:

  在上部工具欄中找到下面圖示的圖標。

點擊下拉箭頭

點擊edit configurations

在host中填入:127.0.0.1   port中填入:8000

OK肯定以後,點擊綠色的三角,web服務就運行起來了。

按圖所示,自動跳轉到瀏覽器程序界面。顯示的倒是下圖的404頁面:

修改一下url,添加「/index」,就一切ok了!

至此,一個最簡單的django編寫的web服務就啓動成功了。

7.  返回HTML文件

  上面咱們返回給用戶瀏覽器的是什麼?一個字符串!實際上這確定不行,一般咱們都是將html文件返回給用戶。

  下面,咱們寫這麼一個index.html文件:

  再修改一下views文件:

爲了讓django知道咱們的html文件在哪裏,須要修改settings文件的相應內容。但默認狀況下,它正好適用,你無需修改。

接下來,咱們能夠從新啓動web服務。在瀏覽器刷新一下,你會看到帶有樣式的「hello world」。

注:這裏有個小技巧,在屢次頻繁重啓服務時,因爲端口未釋放的緣由,容易啓動不了服務,修改一下端口就OK了。

8. 使用靜態文件

  咱們已經能夠將html文件返還給用戶了,可是還不夠,前端三大塊,html、css、js還有各類插件,它們齊全才是一個完整

的頁面。在django中,通常將靜態文件放在static目錄中。接下來,在mysite中新建個static目錄。

你的CSS,JS和各類插件均可以放置在這個目錄裏。

爲了讓django找到這個目錄,依然須要對settings進行配置:

一樣,在index.html文件中,能夠引入js文件了:

從新啓動web服務,刷新瀏覽器,查看結果。

9. 接收用戶發送的數據

  上面,咱們將一個要素齊全的html文件返還給了用戶瀏覽器。但這還不夠,由於web服務器和用戶之間沒有動態交互。

下面咱們設計一個表單,讓用戶輸入用戶名和密碼,提交給index這個url,服務器將接收到這些數據。

  先修改index.html文件

而後修改views.py文件

此時 ,重啓web服務時,會出錯,由於django有一個跨站請求保護機制,咱們在settings文件中將它關閉。

再次進入瀏覽器,刷新頁面:

輸入點東西,而後咱們在pycharm中能夠看到相應的數據。

10. 返回動態頁面

  咱們收到了用戶的數據,但返回給用戶的依然是個靜態頁面,一般咱們會根據用戶的數據,進行處理後在返回給用戶。

這時候,django採用本身的模板語言,相似jinja2,根據提供的數據,替換掉html中的相應部分,詳細語法入門後再深刻學習。

先改造views.py文件:

再改造index.html文件:

重啓服務,刷新瀏覽器:

能夠看到,咱們得到了用戶實時輸入的數據,並將它實時展現在了用戶頁面上,這是個不錯的交互過程。

11. 使用數據庫

  流程走到這裏,django的MTV框架基本已經浮出水面了,只剩下最後的數據庫部分了。

  上面咱們雖然和用戶交互得很好,但並無保存任何數據,頁面一旦關閉,或服務器重啓,一切都將回到原始狀態。

  使用數據庫是毫無疑問的,django經過自帶的ORM框架操做數據庫,而且自帶輕量級的sqlite3數據庫。下面咱們來看一看:

  首先是註冊app:

不註冊它,你的數據庫就不知道該給哪一個app建立表。

而後咱們在settings中,配置數據庫相關的參數,若是使用自帶的sqlite,不須要修改。

 

 再編輯models.py文件,也就是MTV中的M。

這裏咱們建立了2個字段,分別保存用戶的名字和密碼。

接下來要在pycharm的teminal中經過命令建立數據庫的表了。有2條命令,分別是:

python manage.py makemigrations

再輸入命令:python manage.py migrate

修改views.py中的業務邏輯

重啓web服務後,刷新瀏覽器頁面,以後和用戶交互的數據都能保存到數據庫中。任什麼時候候均可以從數據庫中讀取數據,展現到頁面上。

至此,一個要素齊全,主體框架展現清晰的django項目完成了,其實很簡單是否是?

相關文章
相關標籤/搜索