Django筆記-5-檢視
概述
作用
檢視接受web請求, 並相應web請求;
本質
檢視就是一個Python中的函式
相應
- 網頁
- 重定向
- 錯誤檢視
- 404
- 500
- ...
- Json資料
- 過程: 使用者輸入網址→Django解析網址→(獲得訪問欄位)→匹配urls→(獲得檢視函式)→檢視通過模板渲染資料→返回給瀏覽器
url配置
配置流程
-
制定根URL配置檔案
在project資料夾下, seetings.py資料夾下
ROOT_URLCONF=‘project.urls’
-
urlpatterns
- 一個url例項的列表
- url物件
- 正則表示式
- 檢視名稱
- 名稱
-
url匹配正則表示式的注意事項
- 如果想要從url中獲取一個值, 需要對正則加小括號
- 匹配正則前方不需要增加反斜槓
- 正則前需要加r表示字串不轉義
-
引入其他url配置
在應用中建立urls.py檔案, 定義此應用的url方法, 在主專案檔案urls.py中使用include()方法引入;
-
URL的反向解析
-
概述
如果在檢視/模板中使用了硬編碼連結, 在url配置發生改變時,動態生成連結的地址
-
解決
在使用連結是, 通過url配置的名稱,動態生成url地址
-
作用
使用url模板
-
檢視函式
-
定義檢視
本質: 一個函式
-
檢視引數:
- request:一個HttpRequest的例項
- 通過正則表示式獲取的引數
-
位置
一般在views.py檔案下定義
-
-
錯誤檢視
-
404檢視:找不到網頁時返回錯誤
在templates目錄下定義404.html
配置settings.py
DEBUG=False ALLOWED_HOST=[‘*’] # 允許任何人訪問
-
- 500檢視:在檢視程式碼中出現錯誤
- 400檢視:使用者的操作出現錯誤
HttpRequest 物件
-
概述
伺服器接收http請求後, 會根據報文建立HttpResponse物件;
檢視的第一個引數就是HttpResponse物件
Django建立的, 之後呼叫檢視時傳遞的檢視
-
屬性
- path: 請求的完整路徑, 不包括域名和埠;
- method: 表示請求的方式, 常用的有GET/POST;
- encoding: 表示瀏覽器提交的資料的編碼方式;(一般為UTF-8);
- GET: 類似與字典的物件,包含了GET請求的所有引數;
- POST: 類似與字典的物件,包含了POST請求的所有引數;
- FILES: 類似與字典的物件,包含了所有上傳的額檔案;
- COOKIES: 字典物件, 包含所有cookie;
- session: 類似字典的物件,表示當前會話;
-
方法
is_ajax(): 如果是通過XMLHttpRequest發起的, 返回True
-
QueryDict物件
-
request物件中的GET/POST都屬於QueryDict物件;
-
方法
-
get()
作用: 根據鍵獲取值, 僅一個值
-
getlist()
將鍵的值以列表的形式返回, 可以獲取多個值
-
-
-
GET屬性
目的: 獲取瀏覽器傳遞給伺服器的資料
-
POST屬性
使用表單提交POST請求
關閉CSRF
HttpResponse物件
-
概述
作用: 給瀏覽器返回資料;
HttpRequest物件是由django建立的, HttpResponse物件是由程式設計師建立
-
用法
-
不呼叫模板,直接返回資料
-
呼叫模板
-
使用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})
-
-
-
-
屬性
-
content: 返回內容
-
charset: 返回資料的編碼格式
-
status_code: 響應狀態
200/304/404...
-
content-type: 指定輸出的MIME型別
-
-
方法
-
init
使用頁面內容例項化HttpResponse物件
-
write(content)
以檔案的形式寫入
-
flush()
以檔案的形式輸出緩衝區
-
set_cookie(key, value=‘’, max_Age=None, exprise=None)
設定cookies
-
delete_cookie(key)
刪除cookie
注意:
如果刪除一個不存在的cookie , 那麼什麼都不會發生.
-
-
子類HttpResponseRedirect
-
功能
重定向: 伺服器端的跳轉
簡寫: redirect()
to 推薦使用反向解析
-
-
子類JsonResponse
- 返回json資料, 一般用於非同步請求(ajax)
- __init__ :(self, data)
- data: 字典物件
- 注意: content-type型別為application/json
Session狀態保持
-
概述
- http協議是無狀態的, 每次請求都是一次新的請求, 不記住之前請求.
- 客戶端與伺服器端的一次通訊就是一次會話
- 為實現狀態的保持, 在客戶端或服務端儲存會話的資料
-
儲存方式有cookie和session
- cookie: 所有資料都儲存在客戶端, 不要存敏感資料(不安全,資料量小)
- session: 所有資料儲存在服務端, 在客戶端用cookie儲存session_id
-
目的
在一段時間內跟蹤請求者的狀態, 可以實現跨頁面訪問當前的請求者資料
-
注意
不同的請求者不共享此資料, 與請求者一一對應.
-
啟用session
settings.py中
- INSTALLED_APPS中預設啟用
- MIDDLEWARE中預設啟用
-
使用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
-
看老師犯了個錯誤的心得: 每個