視圖的功能
接收請求 進行處理 與M和T進行交互 返回應答
返回HttpResponse
類型的html內(nèi)容 或重定向 redirect
視圖的使用過程
1.定義視圖函數(shù)
request
參數(shù)必須有
request
是一個HttpRquest
類型的對象
形參名可以變化 但一般不修改
2.配置URLs
建立url和視圖函數(shù)之間的對應關系
url匹配的過程
層級進入URLS.py
文件進行匹配 被將匹配的部分不再進入下級URLS文件
匹配 ?
后的不匹配
正則的開始不能使用 \
如\index
錯誤視圖
關閉DEBUG
在項目配置目錄下setting.py
設置DEBUG = False
關閉DEBUG功能
設置ALLOWED_HOST = ["*"]
允許所有IP訪問
404錯誤
找不到頁面會返回404錯誤
默認404會顯示NOT Found頁面
在templates下新建404.html
將使用此模板替代默認404頁面
500錯誤
視圖錯誤會返回500錯誤
默認500會顯示server error
在templates下新建500.html
將使用此模板替代默認500頁面
捕獲url參數(shù)
進行url匹配時 把需要捕獲的部分設置成正則表達式的組
Django框架 會自動把組內(nèi)參數(shù)傳遞給對應視圖函數(shù)
1.位置參數(shù)
使用正則位置參數(shù) 視圖的形參名可以隨意指定
re_path(r"index(\d+)", views.index)
(\d+)內(nèi)的參數(shù)將被傳遞給index視圖函數(shù)的形參
2.關鍵字參數(shù)
re_path(r"index(?P<name>\d+)", views.index)
(?P<name>\d+)內(nèi)的參數(shù)通過關鍵字參數(shù)傳遞給視圖函數(shù)
視圖函數(shù)必須以name命名形參
視圖的參數(shù)
def index(request, name)
return render(request, index.html, {})
request 包含 用戶通過瀏覽器請求的參數(shù)
name 包含 模板文件中設置的參數(shù)
request參數(shù)
request參數(shù)是一個WSGIRequest對象
WSGIRequest 對象屬于django.core.handlers.wsgi.WSGIRequest
request對象包含瀏覽器請求的信息 是將WISG協(xié)議中傳遞給框架的env信息的再次封裝
WSGIRequest對象的屬性
以下屬性都是只讀的,除非特別說明
request.path: 返回字符串 表示請求的路徑 不包含域名和參數(shù)部分
request.method: 返回字符串 表示HTTP請求的方式 如: "GET" "POST"
request.encoding: 返回字符串 表示請求的編碼格式 如果為None表示使用瀏覽器默認設置utf-8 注意:這個屬性不是只讀的如果修改 接下來對屬性的訪問使用新的encoding值
request.GET: 返回QueryDict對象 包含get請求的所有參數(shù)
request.POST: 返回QuertDict對象 包含post請求的所有參數(shù)
request.FILES: 返回MultiValueDict對象 類似于字典 包含所有上傳文件
request.COOKIES: 返回標準Python字典 包含所有的cookies 鍵值都為字符串
request.session: 返回SessionStore對象 類似于字典 表示當前的會話 只有Django啟用會話功能才可用 詳見"狀態(tài)保持" 注意:這個屬性不是只讀的
GET 提交的form表單 參數(shù)在 url中的?后面 多個參數(shù)以&連接
POST 提交的form表單 參數(shù)在 http請求頭中的Form Data中
POST 提交參數(shù)應用于敏感信息的提交 因為不會直接顯示在連接中
QueryDict對象
WSGIRequest 對象的GET 和POST 屬性用來取值
request.GET 或 request.POST 是一個 QueryDict 對象
QueryDict 對象屬于 django.http.request.QueryDict
創(chuàng)建QueryDict對象
q = QueryDict("a=1&a=2&b=3")
對QueryDict對象取值
q["a"] 返回一個字符串
q.get("b") 返回一個字符串
q.getlist("a") 返回一個列表
如果取值不存在的鍵 使用[]取值會報錯KeyError 使用get() 返回None 使用getlist 返回空列表
get()方法設置默認值
q.get("d", "default") 如果沒有d這個Key 會返回字符串default
q.getlist("d", [1, "2"]) 如果沒有d 這個Key 會返回列表[1, "2"]
QueryDict與普通字典的區(qū)別
QueryDict的Key可以對應多個值
q = queryDict("a=1&a=2&a=3")
用[]和get()取值有多個值的QueryDict對象時 只返回最后一個Key的值
q["a"] 返回 3
q.get("a") 返回 3
如果要對QueryDict取值Key對應的所有值 使用getlist()方法
q.getlist("a") 返回一個列表["1", "2", "3"]
Cookie
Cookie 在訪問網(wǎng)站時服務器生成的儲存在瀏覽器的一段文本信息
Django中cookie中的值只以字符串形式儲存
訪問服務器時服務器設置一個cookie key為要保存的id值為要保存的信息
將cookie發(fā)送給瀏覽器瀏覽器保存在本地
訪問服務器時瀏覽器發(fā)送cookie 服務器通過cookie的id取出信息用來判斷狀態(tài)
Cookie的特點
request.COOKIES是一個普通的Python字典
1.以鍵值對的方式存儲 并且只儲存字符串類型的值
2.通過瀏覽器訪問網(wǎng)站時 瀏覽器會將所有跟這個網(wǎng)站相關的Cookie發(fā)送給網(wǎng)站
3.基于域名安全(不會將其他網(wǎng)站的cookie發(fā)給不相關的網(wǎng)站)
4.有過期時間 如果不指定時間 默認關閉瀏覽器后cookie就會過期
設置cookie
通過HttpResponse類的對象或者它的子類的對象
使用對象.set_cookie()設置cookie
對象.set_cookie("key", value, max_age)
response = HttpResponse("設置cookie")
response.set_cookie("num", 1)
renturn response
實際是服務器在ResponseHeader里設置了Set-Cookie的值
瀏覽器發(fā)現(xiàn)Set-Cookie的值后會在本地存儲對應的cookie
讀取cookie
通過HttpRequest類的對象或者它的子類的對象
使用對象.COOKIES[]讀取cookie
對象.COOKIES["key"]
cookie = request.Cookie["num"]
return HttpResponse(cookie)
在讀取cookie時 實際是瀏覽器在RequsetHeader里設置了Cookie的值
瀏覽器將本地保存的有關這個網(wǎng)站的cookie保存在Cookie全部發(fā)送給服務器
Cookie的壽命
瀏覽器在保存cookie時默認當瀏覽器關閉時使cookie過期
response.set_cookie(max_age= , expirse= )
max_age= 以秒為單位設置cookie過期時間
expirse= 以到期日期計算cookie過期時間
session
Django的session中可以儲存任意類型的數(shù)據(jù)
所有的session信息儲存在服務器數(shù)據(jù)庫中的session表中
表的主鍵叫做session_key唯一標示session在表中的位置
表的值叫做 session_data儲存了設置的session鍵值對
過期時間叫做expire_date儲存了session過期日期
訪問服務器時服務器設置session為數(shù)據(jù)表創(chuàng)建記錄
服務器發(fā)送一個key為sessionid值為session_key的cookie給瀏覽器
訪問時服務器通過key為sessionid的cookie獲得session_key
后臺再通過session_key在數(shù)據(jù)庫中獲得session_data
session特點
1.以鍵值對的方式存儲 并且可以儲存任意類型的值
2.依賴于cookie 唯一標識碼sessionid就是cookie的key session_key就是cookie的值
3.有過期時間 如果不指定 默認兩周時間
設置session
通過HttpRequest對象的session屬性設置和讀取session信息
保存時類似于給字典添加鍵值對
對象.session["key"] = value
request.session["username"] = "smart"
讀取session
通過HttpRequset對象的session屬性讀取session信息
取值和沒有值時的默認值
username = 對象.session["username"]
username = 對象.session.get("key", 默認值)
username = request.session["username"]
username = request.session.get("username", "沒有數(shù)據(jù)")
session的方法
session_data在數(shù)據(jù)表中的狀態(tài)
4b662403cdb5656fdba155811da63a59046fe33a:{"username":"smart","password":"passwd"}
刪除session值的部分 也就是session_data中括號中的部分
對象.session.clear()
刪除session整條數(shù)據(jù) 也就是session_data對應的整條數(shù)據(jù)表記錄
對象.session.flush()
刪除session中指定的鍵值對
del 對象.session["key"]
判斷session中是否有對應的key
對象.session.has_key("key")
設置會話的超時時間
如果不設置值則等同于設置為None
對象.session.set_expory(value)
- 如果value是一個整數(shù),sessionid的cookie將在value秒后過 session也會在value秒后過期
- 如果value為0,sessionid的cookie瀏覽器關閉時過期 session會在兩周后過期
- 如果value為None幸撕,sessionid的cookie兩周后過期 session也會在兩周后過期
cookie和session的應用場景
cookie: 記住用戶名 安全性要求不高
session: 銀行卡賬戶 密碼 涉及到安全性比較高的數(shù)據(jù)