HttpResponse對(duì)象
-
介紹
- 視圖在接收請(qǐng)求并處理后,必須返回HttpResponse對(duì)象或子對(duì)象
- 在django.http模塊中定義了HttpResponse對(duì)象的API
- HttpRequest對(duì)象由Django創(chuàng)建,HttpResponse對(duì)象由開發(fā)人員創(chuàng)建
- 運(yùn)行服務(wù)器,在瀏覽器中瀏覽首頁(yè),可以在瀏覽器“開發(fā)者工具”中看到響應(yīng)信息如下圖
- 標(biāo)號(hào)3為響應(yīng)頭信息,點(diǎn)擊標(biāo)號(hào)4處可以查看響應(yīng)體信息
-
屬性
- content:表示返回的內(nèi)容
- charset:表示response采用的編碼字符集,默認(rèn)為utf-8
- status_code:返回的HTTP響應(yīng)狀態(tài)碼
- content-type:指定返回?cái)?shù)據(jù)的的MIME類型,默認(rèn)為'text/html'
-
方法
- init:創(chuàng)建HttpResponse對(duì)象后完成返回內(nèi)容的初始化
- set_cookie:設(shè)置Cookie信息
- write:向響應(yīng)體中寫數(shù)據(jù)
- cookie是網(wǎng)站以鍵值對(duì)格式存儲(chǔ)在瀏覽器中的一段純文本信息,用于實(shí)現(xiàn)用戶跟蹤
- max_age是一個(gè)整數(shù),表示在指定秒數(shù)后過期
- expires是一個(gè)datetime或timedelta對(duì)象,會(huì)話將在這個(gè)指定的日期/時(shí)間過期
- max_age與expires二選一
- 如果不指定過期時(shí)間,默認(rèn)兩個(gè)星期后過期
set_cookie(key, value='', max_age=None, expires=None) - delete_cookie(key):刪除指定的key的Cookie,如果key不存在則什么也不發(fā)生
-
調(diào)用模板簡(jiǎn)寫函數(shù)render
每次調(diào)用模板時(shí)都要執(zhí)行加載、上下文、渲染三個(gè)步驟,為了簡(jiǎn)化操作,Django定義了render()函數(shù)封裝了以上三個(gè)步驟的代碼,定義在django.shortcuts模塊中
打開booktest/views.py文件,定義視圖index3如下
from django.shortcuts import render ... def index3(request): return render(request, 'booktest/index3.html', {'h1': 'hello'})- 是不是用render()函數(shù)調(diào)用模板比上面簡(jiǎn)單多了?
子類JsonResponse
-
介紹
- 在瀏覽器中使用javascript發(fā)起ajax請(qǐng)求時(shí),返回json格式的數(shù)據(jù),此處以jquery的get()方法為例
- 類JsonResponse繼承自HttpResponse對(duì)象,被定義在django.http模塊中
- 接收字典作為參數(shù)
- JsonResponse對(duì)象的content-type為‘a(chǎn)pplication/json’
-
示例
-
在booktest/views.py文件中定義視圖json1、json2,代碼如下
from django.http import JsonResponse ... def json1(request): return render(request,'booktest/json1.html') def json2(request): return JsonResponse({'h1':'hello','h2':'world'})在booktest/urls.py文件中配置url
url(r'^json1/$', views.json1), url(r'^json2/$', views.json2),創(chuàng)建目錄static/js/,把jquery文件拷貝到這個(gè)目錄下
jquery文件 -
打開test3/settings.py文件,在文件最底部,配置靜態(tài)文件查找路徑,并且要求開啟調(diào)試
DEBUG = True ... STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), ] -
在templates/booktest/目錄下創(chuàng)建json1.html,代碼如下
<html> <head> <title>json</title> <script src="/static/booktest/jquery-1.12.4.min.js"></script> <script> $(function () { $('#btnJson').click(function () { $.get('/json2/',function (data) { ul=$('#jsonList'); ul.append('<li>'+data['h1']+'</li>') ul.append('<li>'+data['h2']+'</li>') }) }); }); </script> </head> <body> <input type="button" id="btnJson" value="獲取json數(shù)據(jù)"> <ul id="jsonList"></ul> </body> </html>運(yùn)行服務(wù)器,在瀏覽器中輸入如下地址
http://127.0.0.1:8000/json1/
點(diǎn)擊按鈕“獲取json數(shù)據(jù)”后瀏覽如下圖
json -
ajax代碼執(zhí)行過程如下
- 發(fā)起請(qǐng)求
- 服務(wù)器端視圖執(zhí)行
- 執(zhí)行回調(diào)函數(shù)
-
子類HttpResponseRedirect
-
介紹
- 當(dāng)一個(gè)邏輯處理完成后,不需要向客戶端呈現(xiàn)數(shù)據(jù),而是轉(zhuǎn)回到其它頁(yè)面,如添加成功、修改成功、刪除成功后顯示數(shù)據(jù)列表,而數(shù)據(jù)的列表視圖已經(jīng)開發(fā)完成,此時(shí)不需要重新編寫列表的代碼,而是轉(zhuǎn)到這個(gè)視圖就可以,此時(shí)就需要模擬一個(gè)用戶請(qǐng)求的效果,從一個(gè)視圖轉(zhuǎn)到另外一個(gè)視圖,就稱為重定向
- Django中提供了HttpResponseRedirect對(duì)象實(shí)現(xiàn)重定向功能,這個(gè)類繼承自HttpResponse,被定義在django.http模塊中,返回的狀態(tài)碼為302
-
示例
- 在booktest/views.py文件中定義視圖red1,代碼如下
from django.http import HttpResponseRedirect
...- 定義重定義向視圖,轉(zhuǎn)向首頁(yè)
def red1(request): return HttpResponseRedirect('/')- 在booktest/urls.py文件中配置url
url(r'^red1/$', views.red1),
在地址欄中輸入網(wǎng)址如下
回車后,瀏覽器地址欄如下圖
-
重定向簡(jiǎn)寫函數(shù)redirect
- 在django.shortcuts模塊中為重定向類提供了簡(jiǎn)寫函數(shù)redirect
- 修改booktest/views.py文件中red1視圖,代碼如下
from django.shortcuts import redirect ... def red1(request): return redirect('/')