3. Post and Get
Django後端的工作流程
- 使用者發起http資源請求--->
- Urls.py 進行模式匹配--->
- 對映到相應的view函式邏輯---->
- 用資料渲染網頁模板返回給使用者,或者直接跳轉到相應的網頁。
Post and Get
超文字傳輸協議(HTTP)的設計目的是保證客戶機與伺服器之間的通訊。
HTTP 的工作方式是基於TCP/IP,客戶機與伺服器之間的請求-應答協議。
HTTP包含GET, POST, PUT, DELETE等等方法。常用的就是GET,POST。
Post 和 Get在本質上是沒有區別的,都是一個TCP/IP的連結。
TCP協議通過三次握手,建立埠到埠的,可靠的、基於位元組流(報文段)的連線;IP通過域名解析,路由定址,建立主機之間的交流。通過他們的配合,從而建立了HTTP的基礎。
我們給GET一個定義,你的引數只能放在url中。
同樣,我們給POST一個定義,你的引數(資料)放在Request body中。
那麼各大瀏覽器就會針對不同請求做不同的處理,來提高效率。
POST:向指定的資源提交要被處理的資料
POST 請求不會被快取
POST 請求不會保留在瀏覽器歷史記錄中
POST 不能被收藏為書籤
POST 請求對資料長度沒有要求GET:從指定的資源請求資料
GET 請求可被快取
GET 請求保留在瀏覽器歷史記錄中
GET 請求可被收藏為書籤
GET 請求不應在處理敏感資料時使用
GET 請求有長度限制
GET 請求只應當用於取回資料
這兩種方式還有一個區別,GET只傳送一次請求,POST則大多數情況下(這也取決於瀏覽器)傳送兩次,一次報頭,一次資料。
回到Django
- Get作為一種method,可以用於Form,也可以用於<a>的href上。
Get將表單中資料的按照variable=value的形式,新增到action所指向的URL後面,並且兩者使用“?”連線,而各個變數之間使用“&”連線。
用在Form上時,資料就會被新增在url上返回給伺服器
<form class="form-inline" action="{% url 'display:search' %}" method="get">
{% csrf_token %}
<input class="form-control" type="text" placeholder="Search" name="keywords">
<button class="btn btn-success" type="submit">搜尋全站</button>
</form>
用在<a>的href時,href屬性值就是我們返回給伺服器的url。
<div class="user-name"><a href="{% url 'display:personal_info' %}">{{ request.session.user_name}}</a></div>
這裡的url就是該網頁的位址列裡的地址。
如果Form不明確說明使用get 還是Post,則預設get
Attention: 只要使用了Form這個標籤,就可以用request去獲取引數:
name=request.GET.get('name1') # 獲取引數值
否則就要通過正規表示式去解析url,得到data,將其作為函式引數傳遞到view的函式裡。
<a class="nav-link" href="{% url 'display:category' '程式設計師' %}">IT</a>
url(r'^(?P<category>[\u4e00-\u9fa5]+)/$', views.category, name='category')
def category(request, category):
news = Item.objects.order_by("collect_time")
daily_news = news.order_by('collect_time').filter(category=category)[:6]
context = {
'daily_news': daily_news,
}
return render(request, 'display/category.html', context)
- Post作為一種傳輸資料的method,用在Form上。Post是將表單中的資料放在form的資料體中,按照變數和值相對應的方式,傳遞到action所指向URL。
區別:
request.POST['sth']會返回KeyError如果這裡沒有該引數
request.POST.get('sth')會返回None如果這裡沒有該引數,而且它可以新增一個預設值作為返回。
相關文章
- Get/Post
- GET與POST區別
- What is the difference Put and Post and Get?
- form&method【POST~GET】ORM
- get和post區別
- curl 簡單post get
- Python探析get和post方法Python
- Post,Get介面傻傻分不清?
- GET和POST的區別?
- POST 和 GET 的區別
- post與get的區別
- GET 與 POST 的區別
- GET和POST的區別
- get與post的區別?
- [後臺技術]Post/Get
- jQuery – AJAX get() 和 post() 方法jQuery
- GET 和 POST 的區別
- GET與POST的真正區別
- POST與GET請求區別
- post、get的區別總結
- PHP中GET與POST變數PHP變數
- 筆記:Curl 簡單 post + get筆記
- axios 發get,post 請求小結iOS
- get與post的請求區別
- Java Http Get Post 請求工具類JavaHTTP
- go對get、post請求封裝Go封裝
- get與post的區別總結
- java傳送GET和post請求Java
- 面試之 get 和 post 區別面試
- get,post URL加字尾請求
- Linux curl 命令模擬 POST/GET 請求Linux
- httprequest- post- get -傳送請求HTTP
- vue 發起get請求和post請求Vue
- file_get_contents傳送post請求
- get請求和post請求的區別
- 介面請求 (get、post、head 等) 詳解
- 介面請求(get、post、head等)詳解
- ajax的post或者get伺服器請求伺服器