1. 程式人生 > >Django筆記-5-檢視

Django筆記-5-檢視

概述

作用

檢視接受web請求, 並相應web請求;

本質

檢視就是一個Python中的函式

相應

  • 網頁
    • 重定向
    • 錯誤檢視
      • 404
      • 500
      • ...
  • Json資料
  • 過程: 使用者輸入網址→Django解析網址→(獲得訪問欄位)→匹配urls→(獲得檢視函式)→檢視通過模板渲染資料→返回給瀏覽器

url配置

配置流程

  1. 制定根URL配置檔案

    在project資料夾下, seetings.py資料夾下

    ROOT_URLCONF=‘project.urls’
    
  2. urlpatterns

    • 一個url例項的列表
    • url物件
      • 正則表示式
      • 檢視名稱
      • 名稱
  3. url匹配正則表示式的注意事項

  • 如果想要從url中獲取一個值, 需要對正則加小括號
    • 匹配正則前方不需要增加反斜槓
    • 正則前需要加r表示字串不轉義
  1. 引入其他url配置

    在應用中建立urls.py檔案, 定義此應用的url方法, 在主專案檔案urls.py中使用include()方法引入;

  2. URL的反向解析

    • 概述

      如果在檢視/模板中使用了硬編碼連結, 在url配置發生改變時,動態生成連結的地址

    • 解決

      在使用連結是, 通過url配置的名稱,動態生成url地址

    • 作用

      使用url模板

檢視函式

  1. 定義檢視

    本質: 一個函式

    • 檢視引數:

      • request:一個HttpRequest的例項
      • 通過正則表示式獲取的引數
    • 位置

      一般在views.py檔案下定義

  2. 錯誤檢視

    • 404檢視:找不到網頁時返回錯誤

      在templates目錄下定義404.html

      配置settings.py

      DEBUG=False
      ALLOWED_HOST=[‘*’] # 允許任何人訪問
      
  • 500檢視:在檢視程式碼中出現錯誤
  • 400檢視:使用者的操作出現錯誤

HttpRequest 物件

  1. 概述

    伺服器接收http請求後, 會根據報文建立HttpResponse物件;

    檢視的第一個引數就是HttpResponse物件

    Django建立的, 之後呼叫檢視時傳遞的檢視

  2. 屬性

    1. path: 請求的完整路徑, 不包括域名和埠;
    2. method: 表示請求的方式, 常用的有GET/POST;
    3. encoding: 表示瀏覽器提交的資料的編碼方式;(一般為UTF-8);
    4. GET: 類似與字典的物件,包含了GET請求的所有引數;
    5. POST: 類似與字典的物件,包含了POST請求的所有引數;
    6. FILES: 類似與字典的物件,包含了所有上傳的額檔案;
    7. COOKIES: 字典物件, 包含所有cookie;
    8. session: 類似字典的物件,表示當前會話;
  3. 方法

    is_ajax(): 如果是通過XMLHttpRequest發起的, 返回True

  4. QueryDict物件

    1. request物件中的GET/POST都屬於QueryDict物件;

    2. 方法

      • get()

        作用: 根據鍵獲取值, 僅一個值

      • getlist()

        將鍵的值以列表的形式返回, 可以獲取多個值

  5. GET屬性

    目的: 獲取瀏覽器傳遞給伺服器的資料

  6. POST屬性

    使用表單提交POST請求

    關閉CSRF

HttpResponse物件

  1. 概述

    作用: 給瀏覽器返回資料;

    HttpRequest物件是由django建立的, HttpResponse物件是由程式設計師建立

  2. 用法

    • 不呼叫模板,直接返回資料

    • 呼叫模板

      • 使用render方法

        • 原型

          render(request, templateName, {context})

        • 作用

          結合資料和模板, 返回完成的HTML頁面

        • 引數

          request

          templateName

          context

        • 示例

          def students(request):
              student_list = Student.objects.all()
              return render(request, 'app/students.html',
                            {"students": student_list})
          
  3. 屬性

    • content: 返回內容

    • charset: 返回資料的編碼格式

    • status_code: 響應狀態

      200/304/404...

    • content-type: 指定輸出的MIME型別

  4. 方法

    • init

      使用頁面內容例項化HttpResponse物件

    • write(content)

      以檔案的形式寫入

    • flush()

      以檔案的形式輸出緩衝區

    • set_cookie(key, value=‘’, max_Age=None, exprise=None)

      設定cookies

    • delete_cookie(key)

      刪除cookie

      注意:

      如果刪除一個不存在的cookie , 那麼什麼都不會發生.

  5. 子類HttpResponseRedirect

    • 功能

      重定向: 伺服器端的跳轉

      簡寫: redirect()

      to 推薦使用反向解析

  6. 子類JsonResponse

    • 返回json資料, 一般用於非同步請求(ajax)
    • __init__ :(self, data)
    • data: 字典物件
    • 注意: content-type型別為application/json

Session狀態保持

  1. 概述

    • http協議是無狀態的, 每次請求都是一次新的請求, 不記住之前請求.
    • 客戶端與伺服器端的一次通訊就是一次會話
    • 為實現狀態的保持, 在客戶端或服務端儲存會話的資料
  2. 儲存方式有cookie和session

    • cookie: 所有資料都儲存在客戶端, 不要存敏感資料(不安全,資料量小)
    • session: 所有資料儲存在服務端, 在客戶端用cookie儲存session_id
  3. 目的

    在一段時間內跟蹤請求者的狀態, 可以實現跨頁面訪問當前的請求者資料

  4. 注意

    不同的請求者不共享此資料, 與請求者一一對應.

  5. 啟用session

    settings.py中

    • INSTALLED_APPS中預設啟用
    • MIDDLEWARE中預設啟用
  6. 使用session

    • 啟用session後, 每個HttpRequest物件都有一個session屬性,就是一個類似字典的物件;

    • get(key, default=None): 根據鍵獲取session值

    • clear(): 清空所有的會話

    • flush(): 刪除當前的會話和cookie

    • 設定過期時間:set_expiry(value)

      如果不設定,兩個星期後過期;

      value是整數:例如10,表示10秒鐘;

    • 儲存session的位置

      • 資料庫: 預設儲存在 資料庫中;
      • 快取: 只儲存在本地記憶體中, 如果丟失不能找回,比資料庫快;
      • 資料庫和快取: 優先從本地快取中讀取, 讀取不到再去資料庫中獲取
    • 使用redis儲存session

      • pip install django-redis-session

看老師犯了個錯誤的心得: 每個