本節內容:
一、http協議 二、web框架的概念 三、Django簡介(初識引入)
1、http協議
Hypertext Transfer Protocol,超文本傳輸協議 所謂協議,就是指雙方遵循的規範。http協議, 就是瀏覽器和服務器之間進行「溝通」的一種規範。 http是屬於「應用層的協議」,並且是基於TCP/IP協議的。 解釋:首先是基於TCP/ip協議,而後在此基礎上還有應用層的協議
一、http鏈接的時限
那麼咱們在給服務端發送請求時,獲得響應後,是否還保持的跟服務端的鏈接: 解釋: 一、在最初的http協議,獲得響應結果後,鏈接是斷開的, 此時考慮的是釋放給其餘人鏈接,不讓你長久佔用鏈接,服務器端當即關閉鏈接、釋放資源。 二、如今的http協議,會在你拿到響應結果後,保持一小段時間鏈接(大概幾秒鐘), 這樣在你又點擊時,不用開闢新的鏈接,從而提升資源利用。
二、http協議是無狀態,(不會保存以前的記錄)
也就是「服務器不知道你客戶端幹了啥」,其實很大程度上是基於性能考慮的。 後來有些業務須要查詢以前的記錄,只是coockie緩存就登場了, 後面詳細介紹
三、請求協議格式:瀏覽器丟給服務器的(重點)
通常咱們不怎麼考慮這個格式,由於瀏覽器會幫咱們弄好這一套協議 一個完整的http請求消息,包含一個請求行,若干個消息頭(請求頭),換行,實體內容 請求方式:一、get的話是將路徑拼接在域名後,數據也是,大小有限制, 二、post這是寫在實體內容裏,不會顯示在URL中,數據大小不限,但仍是有安全問題
請求行:描述客戶端的請求方式、請求資源的名稱、http協議的版本號。 例如: GET/BOOK/JAVA.HTML HTTP/1.1 請求頭(消息頭)包含(客戶機請求的服務器主機名,客戶機的環境信息等): Accept:用於告訴服務器,客戶機支持的數據類型 (例如:Accept:text/html,image/*) Accept-Charset:用於告訴服務器,客戶機採用的編碼格式 Accept-Encoding:用於告訴服務器,客戶機支持的數據壓縮格式 Accept-Language:客戶機語言環境 Host:客戶機經過這個服務器,想訪問的主機名 If-Modified-Since:客戶機經過這個頭告訴服務器,資源的緩存時間 Referer:客戶機經過這個頭告訴服務器,它(客戶端)是從哪一個資源來訪問服務器的(防盜鏈) User-Agent:客戶機經過這個頭告訴服務器,客戶機的軟件環境(操做系統,瀏覽器版本等) Cookie:客戶機經過這個頭,將Coockie信息帶給服務器 Connection:告訴服務器,請求完成後,是否保持鏈接 Date:告訴服務器,當前請求的時間 (換行) 實體內容: 就是指瀏覽器端經過http協議發送給服務器的實體數據。例如:name=dylan&id=110 (get請求時,經過url傳給服務器的值。post請求時,經過表單發送給服務器的值)
四、http響應協議格式:服務器返回給瀏覽器的(重點)
一個狀態行,若干個消息頭,以及實體內容
響應頭(消息頭)包含: Location:這個頭配合302狀態嗎,用於告訴客戶端找誰 Server:服務器經過這個頭,告訴瀏覽器服務器的類型 Content-Encoding:告訴瀏覽器,服務器的數據壓縮格式 Content-Length:告訴瀏覽器,回送數據的長度 Content-Type:告訴瀏覽器,回送數據的類型 Last-Modified:告訴瀏覽器當前資源緩存時間 Refresh:告訴瀏覽器,隔多長時間刷新 Content-Disposition:告訴瀏覽器如下載的方式打開數據。例如: context.Response.AddHeader("Content-Disposition","attachment:filename=aa.jpg"); context.Response.WriteFile("aa.jpg"); Transfer-Encoding:告訴瀏覽器,傳送數據的編碼格式 ETag:緩存相關的頭(能夠作到實時更新) Expries:告訴瀏覽器回送的資源緩存多長時間。若是是-1或者0,表示不緩存 Cache-Control:控制瀏覽器不要緩存數據 no-cache Pragma:控制瀏覽器不要緩存數據 no-cache Connection:響應完成後,是否斷開鏈接。 close/Keep-Alive Date:告訴瀏覽器,服務器響應時間 狀態行: 例如: HTTP/1.1 200 OK (協議的版本號是1.1 響應狀態碼爲200 響應結果爲 OK) 實體內容(實體頭):響應包含瀏覽器可以解析的靜態內容,例如:html,純文本,圖片等等信息 關於http協議的更多具體細節,能夠參照http RFC文檔。
第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態消息 三部分組成。 第一行爲狀態行,(HTTP/1.1)代表HTTP版本爲1.1版本,狀態碼爲200,狀態消息爲(ok) 第二部分:消息報頭,用來講明客戶端要使用的一些附加信息 第二行和第三行爲消息報頭, Date:生成響應的日期和時間;Content-Type:指定了MIME類型的HTML(text/html),編碼類型是UTF-8 第三部分:空行,消息報頭後面的空行是必須的 第四部分:響應正文,服務器返回給客戶端的文本信息。 空行後面的html部分爲響應正文。
一、響應狀態碼
詳解html
狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別: 1xx:指示信息--表示請求已接收,繼續處理 2xx:成功--表示請求已被成功接收、理解、接受 3xx:重定向--要完成請求必須進行更進一步的操做 4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現 5xx:服務器端錯誤--服務器未能實現合法的請求 常見狀態碼: 200 OK //客戶端請求成功 400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解 401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用 403 Forbidden //服務器收到請求,可是拒絕提供服務 404 Not Found //請求資源不存在,eg:輸入了錯誤的URL 500 Internal Server Error //服務器發生不可預期的錯誤 503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
2、web應用與web框架
對於全部的Web應用,本質上其實就是一個socket服務端, 用戶的瀏覽器其實就是一個socket客戶端。
一、web應用的本質
最簡單的Web應用就是先把HTML用文件保存好,用一個現成的HTTP服務器軟件, 接收用戶請求,從文件中讀取HTML,返回。
代碼示例java
二、基於wsgiref模塊的自定義的web,詳細示例
正確的作法是底層代碼由專門的服務器軟件實現,咱們用Python專一於生成HTML文檔。 由於咱們不但願接觸到TCP鏈接、HTTP原始請求和響應格式, 因此,須要一個統一的接口,讓咱們專心用Python編寫Web業務。 這個接口就是WSGI:Web Server Gateway Interface。 示例看一遍,知道過程就好了,爲得是爲後面知道Django的各個文件的做用 重點是Django
初步示例1python
初步示例2web
初步示例3數據庫
三、DIY一個本身的web框架
manage.pydjango
urls.py瀏覽器
views.py緩存
3、Django介紹
一、mvc模型(最典型的MVC就是jsp+servlet+javabean模式)
MVC的全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫
二、mtv模型(Django)
Django的MTV分別表明: Model(模型):和數據庫相關的,負責業務對象與數據庫的對象(ORM) Template(模板):放全部的html文件 模板語法:目的是將白變量(數據庫的內容)如何巧妙的嵌入到html頁面中 View(視圖):負責業務邏輯,並在適當的時候調用Model和Template 此外,Django還有一個URL分發器。 它的做用是將一個個URL的頁面請求分別發給不一樣的Views處理,Views再調用相應的Model和Template。
二、Django的基本命令
一、下載Django
在cmd窗口下,pip install django==2.1.1 (2.1.1是版本號)
二、建立一個Django對象
django-admin.py startproject 項目名稱 django-admin.py startproject mysite
三、建立一個應用
python3 manage.py startapp blog(應用名稱)
四、啓動Django項目
python manage.py runserver 8080(不寫就是默認8000端口)
五、建立表命令
python3 manage.py makemigrations python3 manage.py migrate