12-視圖-HttpResponse對(duì)象

HttpResponse對(duì)象

  1. 介紹

    1. 視圖在接收請(qǐng)求并處理后,必須返回HttpResponse對(duì)象或子對(duì)象
    2. 在django.http模塊中定義了HttpResponse對(duì)象的API
    3. HttpRequest對(duì)象由Django創(chuàng)建,HttpResponse對(duì)象由開發(fā)人員創(chuàng)建
    4. 運(yùn)行服務(wù)器,在瀏覽器中瀏覽首頁(yè),可以在瀏覽器“開發(fā)者工具”中看到響應(yīng)信息如下圖
    5. 標(biāo)號(hào)3為響應(yīng)頭信息,點(diǎn)擊標(biāo)號(hào)4處可以查看響應(yīng)體信息
  2. 屬性

    1. content:表示返回的內(nèi)容
    2. charset:表示response采用的編碼字符集,默認(rèn)為utf-8
    3. status_code:返回的HTTP響應(yīng)狀態(tài)碼
    4. content-type:指定返回?cái)?shù)據(jù)的的MIME類型,默認(rèn)為'text/html'
  3. 方法

    1. init:創(chuàng)建HttpResponse對(duì)象后完成返回內(nèi)容的初始化
    2. set_cookie:設(shè)置Cookie信息
    3. write:向響應(yīng)體中寫數(shù)據(jù)
    4. cookie是網(wǎng)站以鍵值對(duì)格式存儲(chǔ)在瀏覽器中的一段純文本信息,用于實(shí)現(xiàn)用戶跟蹤
      1. max_age是一個(gè)整數(shù),表示在指定秒數(shù)后過期
      2. expires是一個(gè)datetime或timedelta對(duì)象,會(huì)話將在這個(gè)指定的日期/時(shí)間過期
      3. max_age與expires二選一
      4. 如果不指定過期時(shí)間,默認(rèn)兩個(gè)星期后過期
      set_cookie(key, value='', max_age=None, expires=None) 
      
    5. delete_cookie(key):刪除指定的key的Cookie,如果key不存在則什么也不發(fā)生
  4. 調(diào)用模板簡(jiǎn)寫函數(shù)render

    1. 每次調(diào)用模板時(shí)都要執(zhí)行加載、上下文、渲染三個(gè)步驟,為了簡(jiǎn)化操作,Django定義了render()函數(shù)封裝了以上三個(gè)步驟的代碼,定義在django.shortcuts模塊中

    2. 打開booktest/views.py文件,定義視圖index3如下

    from django.shortcuts import render
    ...
    def index3(request):
        return render(request, 'booktest/index3.html', {'h1': 'hello'})
    
    1. 是不是用render()函數(shù)調(diào)用模板比上面簡(jiǎn)單多了?

子類JsonResponse

  1. 介紹

    1. 在瀏覽器中使用javascript發(fā)起ajax請(qǐng)求時(shí),返回json格式的數(shù)據(jù),此處以jquery的get()方法為例
    2. 類JsonResponse繼承自HttpResponse對(duì)象,被定義在django.http模塊中
    3. 接收字典作為參數(shù)
    4. JsonResponse對(duì)象的content-type為‘a(chǎn)pplication/json’
  2. 示例

    1. 在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文件

    2. 打開test3/settings.py文件,在文件最底部,配置靜態(tài)文件查找路徑,并且要求開啟調(diào)試

      DEBUG = True
      ...
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static'),
      ]
      
    3. 在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

    4. ajax代碼執(zhí)行過程如下

      1. 發(fā)起請(qǐng)求
      2. 服務(wù)器端視圖執(zhí)行
      3. 執(zhí)行回調(diào)函數(shù)

子類HttpResponseRedirect

  1. 介紹

    1. 當(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è)視圖,就稱為重定向
    2. Django中提供了HttpResponseRedirect對(duì)象實(shí)現(xiàn)重定向功能,這個(gè)類繼承自HttpResponse,被定義在django.http模塊中,返回的狀態(tài)碼為302
  2. 示例

    1. 在booktest/views.py文件中定義視圖red1,代碼如下

    from django.http import HttpResponseRedirect
    ...

    1. 定義重定義向視圖,轉(zhuǎn)向首頁(yè)
    def red1(request):
        return HttpResponseRedirect('/')
    
    1. 在booktest/urls.py文件中配置url

    url(r'^red1/$', views.red1),

    在地址欄中輸入網(wǎng)址如下

    http://127.0.0.1:8000/red1/

    回車后,瀏覽器地址欄如下圖

  3. 重定向簡(jiǎn)寫函數(shù)redirect

    1. 在django.shortcuts模塊中為重定向類提供了簡(jiǎn)寫函數(shù)redirect
    2. 修改booktest/views.py文件中red1視圖,代碼如下
        from django.shortcuts import redirect
        ...
        def red1(request):
            return redirect('/')
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容