目錄php
超文本傳輸協議(HyperText Transfer Protocol,HTTP)是一種用於分佈式、協做式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通訊的基礎。html
1999年6月公佈的 RFC 2616,定義了HTTP協議中現今普遍使用的一個版本——HTTP 1.1。python
HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。服務器以一個狀態行做爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。jquery
如下是 HTTP 請求/響應的步驟:數據庫
例如:在瀏覽器地址欄鍵入URL,按下回車以後會經歷如下流程:django
http協議是基於TCP/IP協議之上的應用層協議。後端
基於請求-響應 的模式:HTTP協議規定,請求從客戶端發出,最後服務器端響應該請求並 返回。換句話說,確定是先從客戶端開始創建通訊的,服務器端在沒有 接收到請求以前不會發送響應。瀏覽器
無狀態保存:HTTP是一種不保存狀態,即無狀態(stateless)協議。HTTP協議 自身不對請求和響應之間的通訊狀態進行保存。也就是說在HTTP這個級別,協議對於發送過的請求或響應都不作持久化處理。服務器
使用HTTP協議,每當有新的請求發送時,就會有對應的新響應產生。協議自己並不保留以前一切的請求或響應報文的信息。這是爲了更快地處理大量事務,確保協議的可伸縮性,而特地把HTTP協議設計成 如此簡單的。網絡
無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間,而且能夠提升併發性能,不能和每一個用戶創建長久的鏈接,請求一次響應一次,服務端和客戶端就中斷了。可是無鏈接有兩種方式,早期的http協議是一個請求一個響應以後,直接就斷開了,可是如今的http協議1.1版本不是直接就斷開了,而是等幾秒鐘,這幾秒鐘是等什麼呢,等着用戶有後續的操做,若是用戶在這幾秒鐘以內有新的請求,那麼仍是經過以前的鏈接通道來收發消息,若是過了這幾秒鐘用戶沒有發送新的請求,那麼就會斷開鏈接,這樣能夠提升效率,減小短期內創建鏈接的次數,由於創建鏈接也是耗時的,默認的好像是3秒中如今,可是這個時間是能夠經過我們後端的代碼來調整的,本身網站根據本身網站用戶的行爲來分析統計出一個最優的等待時間。
注意事項:
請求方式: get與post請求(form表單示例)
GET提交的數據會放在URL以後,也就是請求行裏面,以?分割URL和傳輸數據,參數之間以&相連,如EditBook?name=test1&id=123456.(請求頭裏面那個content-type作的這種參數形式,後面講) POST方法是把提交的數據放在HTTP包的請求體中.
GET提交的數據大小有限制(由於瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制。
GET與POST請求在服務端獲取請求數據方式不一樣,就是咱們本身在服務端取請求數據的時候的方式不一樣了。
get通常用於獲取數據;post通常用於提交數據。
超文本傳輸協議(HTTP)的統一資源定位符將從因特網獲取信息的五個基本元素包括在一個簡單的地址中:
以http://www.luffycity.com:80/news/index.html?id=250&page=1 爲例, 其中:
http,是協議;
www.luffycity.com,是服務器域名;
80,是服務器上的默認網絡端口號,默認不顯示;
/news/index.html,是路徑(URI:直接定位到對應的資源);
?id=250&page=1,是查詢。
大多數網頁瀏覽器不要求用戶輸入網頁中「http://」的部分,由於絕大多數網頁內容是超文本傳輸協議文件。一樣,「80」是超文本傳輸協議文件的經常使用端口號,所以通常也沒必要寫明。通常來講用戶只要鍵入統一資源定位符的一部分(www.luffycity.com:80/news/index.html?id=250&page=1)就能夠了。
因爲超文本傳輸協議容許服務器將瀏覽器重定向到另外一個網頁地址,所以許多服務器容許用戶省略網頁地址中的部分,好比 www。從技術上來講這樣省略後的網頁地址其實是一個不一樣的網頁地址,瀏覽器自己沒法決定這個新地址是否通,服務器必須完成重定向的任務。
請求格式:
請求行 請求頭部 空行 請求數據
請求行:
請求方式(GET/POST) 路由url(路徑) HTTP/1.1
響應格式:
狀態行 響應頭部 空行 響應正文
狀態行:
HTTP/1.1 200 OK
有HTTP響應的第一行都是狀態行,依次是當前HTTP版本號,3位數字組成的狀態代碼,以及描述狀態的短語,彼此由空格分隔。
狀態代碼的第一個數字表明當前響應的類型:
類型 | 類別 | 緣由短語 |
---|---|---|
1XX | Informational(信息性狀態碼) | 接收的請求正在處理 |
2XX | Success(成功狀態碼) | 請求正常處理完畢 |
3XX | Redirection(從新定向狀態碼) | 須要進行附加操做以完成請求 |
4XX | Client Error(客戶端錯誤狀態碼) | 服務器沒法處理請求 |
5XX | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
301是永久重定向,302是臨時重定向。
1)301和302的區別。 301和302狀態碼都表示重定向,就是說瀏覽器在拿到服務器返回的這個狀態碼後會自動跳轉到一個新的URL地址,這個地址能夠從響應的Location首部中獲取 (用戶看到的效果就是他輸入的地址A瞬間變成了另外一個地址B)——這是它們的共同點。 他們的不一樣在於。301表示舊地址A的資源已經被永久地移除了(這個資源不可訪問了),搜索引擎在抓取新內容的同時也將舊的網址交換爲重定向以後的網址; 302表示舊地址A的資源還在(仍然能夠訪問),這個重定向只是臨時地從舊地址A跳轉到地址B,搜索引擎會抓取新的內容而保存舊的網址。 SEO302好於301 2)重定向緣由: (1)網站調整(如改變網頁目錄結構); (2)網頁被移到一個新地址; (3)網頁擴展名改變(如應用須要把.php改爲.Html或.shtml)。 這種狀況下,若是不作重定向,則用戶收藏夾或搜索引擎數據庫中舊地址只能讓訪問客戶獲得一個404頁面錯誤信息,訪問流量白白喪失;再者某些註冊了多個域名的 網站,也須要經過重定向讓訪問這些域名的用戶自動跳轉到主站點等。
下載安裝:
pip3 install django == 1.11.9 pip3 install django == 1.11.9 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 清華源下載
建立項目:
1. 命令行: django-admin startproject 項目名 2. pycharm:File--New Project--Django--location中寫項目路徑及文件名、選擇Existing interpreter(添加python解釋器)
建立應用:
python manage.py startapp 應用名 須要在setting配置文件中,installapps的列表中,添加一個app名稱做爲配置。 應用下有幾個文件: models.py :以前咱們寫的那個名爲model的文件就是建立表用的,這個文件就是存放與該app(應用)相關的表結構的。 views.py :存放與該app相關的視圖函數的(邏輯)。
啓動項目:
python manage.py runserver # 默認是127.0.0.1:8000 python manage.py runserver 127.0.0.1 # 設置ip,端口默認8000 python manage.py runserver 127.0.0.1:80 # 全設置,不用寫80端口
from django.conf.urls import url from django.contrib import admin from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^home/', views.home),]
from django.shortcuts import render,HttpResponse def home(request): # request -- 請求相關的信息對象 return render(request, 'home.html') #模板渲染 模板就是html頁面 渲染就是字符串替換 #第一個參數:request 第二個參數是html頁面路徑 #return HttpResponse('str') # 返回字符串數據
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>24期官網</h1> </body> {#<script src="jquery.js"></script>#} </html>
啓動項目後,執行效果以下:
若是報如下錯誤:
如今只須要作一步,在settings配置文件裏面將這一行註釋掉,這是django給你加的一個csrf的認證,如今不須要。
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
Web服務器開發領域裏著名的MVC模式,所謂MVC就是把Web應用分爲模型(M),控制器(C)和視圖(V)三層,他們之間以一種插件式的、鬆耦合的方式鏈接在一塊兒,模型負責業務對象與數據庫的映射(ORM),視圖負責與用戶的交互(頁面),控制器(url分發器)接受用戶的輸入調用模型和視圖完成用戶的請求,其示意圖以下所示:
Django的MTV模式本質上和MVC是同樣的,也是爲了各組件間保持鬆耦合關係,只是定義上有些許不一樣,Django的MTV分別是值:
除了以上三層以外,還須要一個URL分發器,它的做用是將一個個URL的頁面請求分發給不一樣的View處理,View再調用相應的Model和Template,MTV的響應模式以下所示:
通常是用戶經過瀏覽器向咱們的服務器發起一個請求(request),這個請求會去訪問視圖函數,(若是不涉及到數據調用,那麼這個時候視圖函數返回一個模板也就是一個網頁給用戶),視圖函數調用模型,模型去數據庫查找數據,而後逐級返回,視圖函數把返回的數據填充到模板中空格中,最後返回網頁給用戶。