視圖

視圖的功能

接收請求 進行處理 與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ù)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市凄吏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌闰蛔,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图柏,死亡現(xiàn)場離奇詭異序六,居然都是意外死亡,警方通過查閱死者的電腦和手機蚤吹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門例诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來随抠,“玉大人,你說我怎么就攤上這事繁涂」八” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵扔罪,是天一觀的道長秉沼。 經(jīng)常有香客問我,道長矿酵,這世上最難降的妖魔是什么唬复? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮全肮,結果婚禮上敞咧,老公的妹妹穿的比我還像新娘。我一直安慰自己辜腺,他們只是感情好休建,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著评疗,像睡著了一般丰包。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上壤巷,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天邑彪,我揣著相機與錄音,去河邊找鬼胧华。 笑死寄症,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的矩动。 我是一名探鬼主播有巧,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼悲没!你這毒婦竟也來了篮迎?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤示姿,失蹤者是張志新(化名)和其女友劉穎甜橱,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栈戳,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡岂傲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了子檀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镊掖。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡乃戈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出亩进,到底是詐尸還是另有隱情症虑,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布归薛,位于F島的核電站谍憔,受9級特大地震影響,放射性物質發(fā)生泄漏苟翻。R本人自食惡果不足惜韵卤,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望崇猫。 院中可真熱鬧沈条,春花似錦、人聲如沸诅炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涕烧。三九已至月而,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間议纯,已是汗流浹背父款。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞻凤,地道東北人憨攒。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像阀参,于是被迫代替她去往敵國和親肝集。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 視圖函數(shù) 定義視圖 ? 本質就是一個函數(shù)? 視圖的參數(shù)? 一個HttpRequest 實例? 通過正則表達式組獲取...
    流藍淺閱讀 1,391評論 0 1
  • HttpReqeust對象介紹服務器接收到http協(xié)議的請求后蛛壳,會根據(jù)報文創(chuàng)建HttpRequest對象杏瞻,這個對象...
    B頭閱讀 432評論 0 0
  • 一、視圖-路由 路由對應視圖函數(shù)衙荐,并且可以接受參數(shù)捞挥。 參數(shù)類型 路勁參數(shù) 位置參數(shù) 關鍵字參數(shù) 請求參數(shù) g...
    月亮是我踢彎得閱讀 3,628評論 0 0
  • 前言 視圖:即一個python函數(shù),可以叫 視圖函數(shù)赫模,或者簡稱 視圖树肃,定義在 應用/views.py 文件中。作用...
    NewForMe閱讀 335評論 0 2
  • HttpRequest對象 服務器接收到http協(xié)議的請求后瀑罗,會根據(jù)報文創(chuàng)建HttpRequest對象胸嘴,這個對象不...
    錦魚閱讀 332評論 0 0