視圖類(lèi)

功能

圖1

簡(jiǎn)單回顧盒发,視圖功能,接收請(qǐng)求玛迄,進(jìn)行處理由境,和M.T交互,返回應(yīng)答

我開(kāi)門(mén)可以返回HttpResponse頁(yè)面蓖议,也可以返回HttpResponseResdirect


使用

圖2

首先我們要定義視圖函數(shù)虏杰,接收request參數(shù),

然后配置urls勒虾,將項(xiàng)目的urls配置包含我們的應(yīng)用纺阔,將應(yīng)用的urls配置指向我們的視圖函數(shù),配置項(xiàng)存在于列表urlpatterns中修然,每個(gè)項(xiàng)目都是url函數(shù)


我們將新項(xiàng)目配置好后笛钝,比如我們讓index返回個(gè)首頁(yè)质况,具體就不說(shuō)了,我們?nèi)绻聪聢D輸入url玻靡,并不會(huì)404,是因?yàn)檎?qǐng)求資源是端口號(hào)/后面開(kāi)始到?前结榄,問(wèn)號(hào)后是我們傳入的參數(shù)

圖3

所以我們記住每次參與匹配的只有我們請(qǐng)求資源的部分,即如上圖的index

圖4

如果資源匹配不成功囤捻,我們會(huì)看到上圖中在項(xiàng)目的urlpatterns里匹配了2個(gè)url項(xiàng)臼朗,但是都沒(méi)匹配,于是就出現(xiàn)404蝎土,當(dāng)然這是調(diào)試的時(shí)候我們這么顯示视哑,如果是別人訪(fǎng)問(wèn)你的頁(yè)面。能給人顯示么誊涯,明顯不能暗惨恪!這不是告訴人家我們調(diào)整哪些路徑就會(huì)ok了么

我們還能看出DEBUG=True醋拧,一旦我們完成了調(diào)試慷嗜,我們一定要給其設(shè)置為False ?!!!!!

圖5

我們?nèi)绻l(fā)布了,就需要給項(xiàng)目的settings.py里找到DEBUG = True 將其修改為False

圖6

我們只設(shè)置DEBUG = False還不夠

日志會(huì)提醒我們要設(shè)置ALLOWED_HOSTS丹壕,

我們繼續(xù)在setting.py下面設(shè)置ALLOWED_HOSTS = ['*']即可以訪(fǎng)問(wèn)的主機(jī)不限

圖7

我們繼續(xù)訪(fǎng)問(wèn)不存在資源就會(huì)看到如上的頁(yè)面

如果我們想自己設(shè)置這個(gè)頁(yè)面庆械,可以在templates下面創(chuàng)建一個(gè)404.html 如下

圖8

如果用戶(hù)訪(fǎng)問(wèn)不存在資源,會(huì)將request_path傳給這個(gè)頁(yè)面菌赖,我們可以在頁(yè)面上顯示缭乘,而這個(gè)html我們不用給其配置視圖也不用管urls,django會(huì)自動(dòng)給我們顯示琉用,如下圖

圖9

同理我們?nèi)绻?wù)端代碼出現(xiàn)問(wèn)題堕绩,如果我們?cè)O(shè)置非DEBUG,django會(huì)給我們一個(gè)500頁(yè)面

圖10

我們也可以自己設(shè)置這個(gè)頁(yè)面邑时,在目標(biāo)文件夾下創(chuàng)建500.html奴紧,如下

圖11

我們網(wǎng)站經(jīng)常會(huì)出現(xiàn)的就是以上2個(gè)錯(cuò)誤,如果是404晶丘,可能是沒(méi)有資源黍氮,也可能就是我們配置錯(cuò)了,

如果是500一般是視圖調(diào)用代碼出現(xiàn)問(wèn)題

我們?nèi)绻情_(kāi)發(fā)模式浅浮,還是建議給設(shè)置DEBUG=True,ALLOWED_HOSTS = []

這樣django會(huì)直接在頁(yè)面上給我們很多錯(cuò)誤提示信息沫浆,

圖12

如圖中嘗試將字符串和數(shù)字拼接(這里是人為故意設(shè)置)


urls參數(shù)捕獲

我們之前說(shuō)了如果我們捕獲參數(shù),url(r'args(\d+)',views.showargs)滚秩,正則部分會(huì)把請(qǐng)求資源的數(shù)字部分當(dāng)做參數(shù)傳給視圖函數(shù)专执,所以視圖函數(shù)除了request參數(shù),也一定要把這部分傳入

我們還可以使用正則表達(dá)式起組名的方式

圖13

我們?cè)O(shè)置完組名郁油,給函數(shù)傳遞參數(shù)也必須用這個(gè)組名本股,否則會(huì)報(bào)錯(cuò)

圖14

登錄案例

我們之前講了視圖函數(shù)里有個(gè)必須寫(xiě)的參數(shù)request攀痊,其實(shí)是HttpRequest對(duì)象,里面有一些屬性痊末,都是django為我們封裝好的蚕苇,我們這里通過(guò)一個(gè)案例學(xué)習(xí)下

我們做一個(gè)登錄的案例,當(dāng)然頁(yè)面得有用戶(hù)密碼凿叠,我們寫(xiě)login.html,要設(shè)置表單和輸入框嚼吞,方法我們講過(guò)get和post盒件,get提交數(shù)據(jù)會(huì)顯示在url中,我們使用post舱禽,數(shù)據(jù)在請(qǐng)求體中炒刁,然后記得設(shè)置個(gè)提交按鈕

圖15

頁(yè)面提交我們?cè)O(shè)置給login_check

圖16

我們給urls配置login,但是視圖函數(shù)先空著寫(xiě)個(gè)返回login.html渲染

圖17

我們?cè)诰W(wǎng)頁(yè)訪(fǎng)問(wèn)login誊稚,填寫(xiě)信息后翔始,會(huì)發(fā)現(xiàn)404,當(dāng)然我們沒(méi)寫(xiě)login_check里伯,我們可以看到審查元素里有我們提到的表單信息

圖18

我們現(xiàn)在寫(xiě)視圖函數(shù)城瞎,我們接收的request對(duì)象,分別有GET和POST屬性疾瓮,其中GET保留的是GET接收的參數(shù)脖镀,POST是POST接收的,我們嘗試打印下這個(gè)POST類(lèi)型(先告知返回的類(lèi)型是QueryDict請(qǐng)求字典)狼电,我們記得把urls里也配置好蜒灰,

我們網(wǎng)頁(yè)請(qǐng)求login輸入跳轉(zhuǎn)到login_check,會(huì)發(fā)現(xiàn)出現(xiàn)403肩碟,如下圖

圖19
圖20

我們后面會(huì)介紹為什么會(huì)403强窖,我們這里為了不看見(jiàn)403,要給項(xiàng)目settings.py的一行注釋掉削祈,如上圖

圖21

后臺(tái)日志可以看到類(lèi)型為django.http.request.QueryDict類(lèi)型翅溺,所以request的GET和POST都是QueryDict類(lèi)型,為了看怎么使用岩瘦,我們?nèi)hell里運(yùn)行下

圖22

我們導(dǎo)入QueryDict未巫,傳參數(shù)可以使用條件&,然后我們就可以使用字典一樣訪(fǎng)問(wèn)元素启昧,有[]或者get,但是這里get如果訪(fǎng)問(wèn)一個(gè)不存在的鍵沒(méi)有結(jié)果叙凡,而[]會(huì)報(bào)錯(cuò),當(dāng)然get方法也可以像字典一樣傳入默認(rèn)值密末,這里需要注意的是會(huì)k,v都被設(shè)置成了字符串

圖23

QueryDict允許一鍵多值握爷,比如我們[]或者get訪(fǎng)問(wèn)上圖'a'會(huì)得到最后一個(gè)值跛璧,想查看多值,可以用getlist(key)獲得多值列表

圖24

所以我們就可以通過(guò)使用鍵值來(lái)獲得賬號(hào)密碼新啼,鍵必須和我們之前input控件的name一致

然后下一步就是根據(jù)用戶(hù)名密碼在數(shù)據(jù)庫(kù)里進(jìn)行校驗(yàn)追城,根據(jù)情況返回頁(yè)面

圖25

我們r(jià)equest還有其他屬性,如上圖燥撞,我們已經(jīng)知道了GET座柱,POST,其他解釋如圖


視圖Ajax請(qǐng)求

我們之前設(shè)置的網(wǎng)頁(yè)都是在一個(gè)頁(yè)面的基礎(chǔ)上重新刷新頁(yè)面物舒,如果網(wǎng)頁(yè)的資源比較多色洞,那么用戶(hù)的體驗(yàn)會(huì)是非常差的,就涉及到了ajax請(qǐng)求(ajax在javascript里是異步的意思)(這里我們js幾乎沒(méi)看冠胯,然后變成跳轉(zhuǎn)看js去了火诸,日了)type默認(rèn)是get方式,但是get方式能保留的數(shù)據(jù)有限

圖26

我們下面做一個(gè)ajax例子

新建一個(gè)ajax頁(yè)面荠察,然后配置下設(shè)置置蜀,我們?cè)陧?xiàng)目下新建static文件夾,然后在settings.py里給創(chuàng)建列表STATICFILES_DIRS=[os.path.join(BASE_DIR,'static')]悉盆,然后我們創(chuàng)建的所有靜態(tài)文件都可以放到里面盯荤,如css,js

圖27

視頻中給文件夾放了個(gè)js文件狮崩,如下圖script的src(然而我沒(méi)有!可以百度到下載或者自建百度賦值粘貼)审姓,然后下面寫(xiě)了js代碼,定義ajax請(qǐng)求腌乡,綁定ajax的click事件京髓,里面url設(shè)置為請(qǐng)求ajax_handle(一會(huì)兒要urls和視圖函數(shù)配置)航缀,類(lèi)型用json,如果成功執(zhí)行函數(shù)堰怨,函數(shù)處理部分先不寫(xiě)

圖28

我們先在urls里寫(xiě)上2個(gè)頁(yè)面索引芥玉,一個(gè)是text_ajax資源的索引,另一個(gè)是我們ajax請(qǐng)求的ajax_handle索引

圖29

在views.py里备图,我們加上2個(gè)對(duì)應(yīng)的視圖函數(shù)灿巧,一個(gè)是用戶(hù)最最開(kāi)始訪(fǎng)問(wèn)的頁(yè)面,當(dāng)然就是text_ajax頁(yè)面揽涮,我終于轉(zhuǎn)過(guò)彎抠藕,另一個(gè)就是我們ajax請(qǐng)求的頁(yè)面,因?yàn)橐祷豭son數(shù)據(jù)蒋困,我們從django.http import JsonResponse即可盾似,里面?zhèn)魅胱值涓袷剑覀儙煼兜膫魅雮€(gè)簡(jiǎn)單字典雪标,如下

圖30


圖31

我們剛才給ajax的success函數(shù)還沒(méi)有處理零院,我們這里就做個(gè)alert彈窗溉跃,把data(這個(gè)data就是接收到的數(shù)據(jù)字典,我們alert一下res鍵的值)

圖32

這里配置靜態(tài)資源的作用是告抄,我們?cè)L問(wèn)Js文件撰茎,但這個(gè)文件不需要經(jīng)過(guò)視圖函數(shù)處理,而是作為靜態(tài)資源給html打洼,否則會(huì)404(如果中間出現(xiàn)ajax錯(cuò)誤龄糊,我們就要用審查元素查看錯(cuò)誤)

圖33

下面談下登錄頁(yè)面,比如我們的登錄募疮,如果點(diǎn)擊登錄绎签,默認(rèn)會(huì)再請(qǐng)求一次網(wǎng)頁(yè),如果頁(yè)面資源比較多酝锅,用戶(hù)體驗(yàn)就會(huì)很差

圖34

我們對(duì)之前的代碼再體驗(yàn)下異步,我們?cè)诤瘮?shù)里分別alert3個(gè)1,2,3奢方,我們點(diǎn)擊按鈕后搔扁,會(huì)發(fā)現(xiàn)數(shù)字并不一定是1,2,3的順序,比如上面的可能是1,3,2(1,3順序不會(huì)變)但是彈3不會(huì)等里面是否success

圖35

我們的ajax還有個(gè)參數(shù)async異步蟋字,默認(rèn)是true(js不是Python的True)稿蹲,我們?cè)O(shè)置false就能實(shí)現(xiàn)123的順序執(zhí)行


ajax登錄案例

我們之前介紹了表單post提交,我們這回不通過(guò)表單鹊奖,利用ajax苛聘,如果登陸成功提示,用戶(hù)名密碼忠聚,不成功也提示

我們新建一個(gè)ajax_login.html

圖36

我們?cè)O(shè)置按鈕设哗,2個(gè)input,設(shè)置對(duì)應(yīng)的id,'btnLogin','username','password'两蟀,使用jquery的通過(guò)id獲得值的方法$(id字符串).val()將數(shù)據(jù)作為下面ajax函數(shù)的參數(shù)网梢,ajax里方法也有post和get,我們使用post,data為我們發(fā)送的數(shù)據(jù)赂毯,返回要求是json格式數(shù)據(jù)

圖37

我們還是用res的0,1來(lái)判斷是否登陸成功战虏,如果是0,我們默認(rèn)設(shè)置了div為display:none党涕,我們就調(diào)用其show().html(文本字符串)就實(shí)現(xiàn)div的顯示同時(shí)顯示我們?cè)O(shè)置的文本烦感,否則我們就讓其跳轉(zhuǎn),注意跳轉(zhuǎn)一定要寫(xiě)在這里膛堤,后面函數(shù)會(huì)說(shuō)明(ajax本身是后臺(tái)請(qǐng)求手趣,通過(guò)其請(qǐng)求的頁(yè)面不會(huì)被展示到頁(yè)面),這里用locdation.href賦值我們回到index頁(yè)面

圖38

然后我們編寫(xiě)視圖函數(shù)骑祟,因?yàn)槭荘OST方法回懦,我們還是可以使用request.POST.get鍵值獲得屬性气笙,我們這里設(shè)置了個(gè)判斷,根據(jù)情況返回json格式結(jié)果怯晕,視圖函數(shù)寫(xiě)完進(jìn)行urls配置

圖39

配置完運(yùn)行潜圃,實(shí)現(xiàn)功能,(中間我查了好久舟茶,才發(fā)現(xiàn)光顧著看檢查函數(shù)谭期,忘了寫(xiě)login_ajax基本函數(shù),還有403之前只顧做筆記沒(méi)有給settings.py注釋?zhuān)@回見(jiàn)識(shí)到了吧凉,還有href我老寫(xiě)成herf隧出,,MD7薄U偷伞)

最后我們說(shuō)下之前說(shuō)的為什么正確,不能再視圖函數(shù)里用重定向饲鄙,如果我們使用凄诞,因?yàn)槭莂jax請(qǐng)求,是在后臺(tái)請(qǐng)求index頁(yè)面忍级,卻不是瀏覽器請(qǐng)求帆谍,我們就還在登錄界面掛著


狀態(tài)保持

圖40

然而有時(shí)候我們就是需要保持登錄狀態(tài),比如刷新頁(yè)面再登錄轴咱,還有點(diǎn)擊記住用戶(hù)名等等

http用于記住用戶(hù)信息有2種方式汛蝙,cookie和session

Cookie

形象形容,我去找老板買(mǎi)豆?jié){朴肺,老板給單子設(shè)置cookie窖剑,然后找老板拿豆?jié){,把單子給老板宇挫,這里我就是瀏覽器的角色苛吱,老板是服務(wù)器,單子就是cookie

圖41

我們上圖來(lái)講解cookie器瘪,當(dāng)我們第一次用瀏覽器訪(fǎng)問(wèn)服務(wù)器時(shí)翠储,服務(wù)器對(duì)用戶(hù)請(qǐng)求處理,同時(shí)設(shè)置其cookie信息橡疼,然后將其發(fā)送給瀏覽器援所,我們?yōu)g覽器下次訪(fǎng)問(wèn)就會(huì)帶著cookie訪(fǎng)問(wèn)服務(wù)器

圖42

cookie存儲(chǔ)在瀏覽器端的小段文本,以鍵值對(duì)存儲(chǔ)欣除,有時(shí)間限制住拭,不指定,默認(rèn)是關(guān)閉

圖43

我們?cè)O(shè)置cookie使用HttpResponse對(duì)象或者繼承他的方法,使用set_cookie函數(shù)

瀏覽器發(fā)給服務(wù)器的cookie滔岳,我們可以通過(guò)視圖函數(shù)request.COOKIES獲得

為了實(shí)現(xiàn)cookie案例杠娱,我們先寫(xiě)2個(gè)對(duì)應(yīng)的視圖函數(shù)如下

圖44

我們寫(xiě)2個(gè)函數(shù),名稱(chēng)必須固定谱煤,set_cookie函數(shù)摊求,我們創(chuàng)建一個(gè)HttpResponse實(shí)例,我們給其調(diào)用其set_cookie方法刘离,我們傳入2個(gè)參數(shù)室叉,鍵設(shè)置為'num',值1,然后返回這個(gè)對(duì)象

get_cookie函數(shù)硫惕,我們這里就將接收到的cookie的num值獲取后先進(jìn)行返回

視圖函數(shù)寫(xiě)好后進(jìn)行配置urls

圖45

配置好茧痕,我們就可以訪(fǎng)問(wèn)set_cookie

圖46

我們可以看到我們?cè)L問(wèn)的時(shí)候,收到了瀏覽器的響應(yīng)cookies num,1

圖47

我們還可以看到響應(yīng)頭里恼除,有Set_Cookie鍵踪旷,里面是我們的信息,這里其實(shí)是通過(guò)我們的set_cookie函數(shù)豁辉,通過(guò)返回的HttpResponse對(duì)象埃脏,將其變成響應(yīng)頭部分

圖48

上面我們保留了cookie,這次我們?cè)L問(wèn)get_cookie秋忙,可以看到頁(yè)面給我們返回1,在審查元素构舟,可以看到Cookie里得到num=1

圖49

我們?cè)赾ookies里也會(huì)看到request cookies num 1因?yàn)槲覀兪菐е鴆ookie請(qǐng)求的

我們說(shuō)過(guò)HttpResponse子類(lèi)也可以灰追,所以我們也可以是HttpRedirect,JsonResponse

圖50

cookie是有時(shí)間限制的的,比如我們關(guān)閉瀏覽器狗超,再?lài)L試訪(fǎng)問(wèn)get_cookie弹澎,就會(huì)報(bào)keyerror,我們也會(huì)看到cookie里沒(méi)有了num項(xiàng)

圖51

其實(shí)set_cookie還可以保持時(shí)間努咐,可以使用max_age參數(shù)或者expires參數(shù)苦蒿,max_age是秒數(shù),我們?cè)O(shè)置2周可以用前面的渗稍,如果是后者佩迟,需要datetime導(dǎo)入timedelta,比較麻煩竿屹,正常是2個(gè)參數(shù)寫(xiě)一個(gè)即可报强,推薦前者

圖52

我們?cè)O(shè)置時(shí)間后,訪(fǎng)問(wèn)set_cookie拱燃,可以看到cookies里多了時(shí)間14天

圖53

同樣秉溉,headers里Set_Cookie里也能看到有效時(shí)間等,當(dāng)然我們關(guān)了瀏覽器,也還能訪(fǎng)問(wèn)get_cookie了

圖54

cookie可以不止一個(gè)鍵值對(duì)召嘶,我們可以設(shè)置多個(gè)cookie如上

cookie基于域名是安全的父晶,我們?cè)L問(wèn)百度,瀏覽器只會(huì)把百度的cookie發(fā)給百度弄跌,訪(fǎng)問(wèn)淘寶只會(huì)發(fā)淘寶的cookie


Cookie案例 讓Cookie記住用戶(hù)名

我們基于之前的登錄案例甲喝,我們下面加一個(gè)checkbox對(duì)是否勾選提示

圖55

我們現(xiàn)在函數(shù)里打印下這個(gè)remember的value看看是什么

圖56

可以看到未勾選后臺(tái)打印了個(gè)none

圖57

當(dāng)點(diǎn)擊勾選打印on,所以我們可以判斷是on記住用戶(hù)名碟绑,設(shè)置cookie俺猿,否則不設(shè)置

圖58

我們?cè)谝晥D函數(shù)里增加判斷如果用戶(hù)密碼正確,而且選了記住用戶(hù)名on格仲,我們返回redirect對(duì)象(redirect返回的是HttpResponse對(duì)象押袍,可以set_cookie),這里我們給cookie傳入username凯肋,

圖59

當(dāng)我們點(diǎn)擊勾選谊惭,且正確登錄,我們可以看到跳轉(zhuǎn)頁(yè)面里返回響應(yīng)cookies的用戶(hù)名

圖60

然后我們?yōu)榱讼麓蔚卿浺材苡涀∮脩?hù)名侮东,我們就在請(qǐng)求login資源的時(shí)候圈盔,利用COOKIES數(shù)據(jù),但是第一次可能沒(méi)有COOKIE,我們需要判斷悄雅,在就返回值否則返回空字符串驱敲,同時(shí),將字典作為渲染render的參數(shù)返回宽闲,

圖61

我們就同時(shí)修改login.html將input用戶(hù)名的地方value設(shè)置為我們傳入的username參數(shù)

圖62

這樣我們?cè)偎⑿聟?shù)就可以看到用戶(hù)名顯示在上面,

中間我半天出不來(lái)众眨,我才發(fā)現(xiàn)表單提交是通過(guò)name而不是id,我開(kāi)始把字符串都給id了容诬,蠢爆C淅妗!览徒!


Session

之前說(shuō)了cookie狈定,這回講session,比如我們辦健身卡习蓬,老板給你個(gè)卡號(hào)纽什,以后并卡號(hào)就可以健身

圖63

如上圖,當(dāng)我們?cè)L問(wèn)網(wǎng)站時(shí)躲叼,服務(wù)器就會(huì)存儲(chǔ)用戶(hù)信息到表django_session中稿湿,然后這個(gè)表有session_key,session_data字段,數(shù)據(jù)就在session_data中押赊,session_key是服務(wù)端設(shè)置的能唯一識(shí)別你的信息的標(biāo)識(shí)碼饺藤,服務(wù)器就將這個(gè)標(biāo)識(shí)碼sessionid作為cookie內(nèi)容和響應(yīng)一起發(fā)回瀏覽器包斑,讓瀏覽器保存

瀏覽器再次訪(fǎng)問(wèn)服務(wù)器就會(huì)根據(jù)這個(gè)sessionid獲取對(duì)應(yīng)的信息,信息再request.session中

圖64

我們的session是存儲(chǔ)在服務(wù)器端的涕俗,用鍵值對(duì)存儲(chǔ)罗丰,依賴(lài)cookie,有過(guò)期時(shí)間再姑,默認(rèn)2周

圖65

我們?cè)O(shè)置獲取都是通估計(jì)request.session萌抵,用鍵名訪(fǎng)問(wèn),具體怎么實(shí)現(xiàn)的django框架幫你搞定

簡(jiǎn)單session讀取設(shè)置案例

圖66

我們給視圖函數(shù)添加2個(gè)函數(shù)元镀,一個(gè)是設(shè)置session,我們直接給session的按鍵值對(duì)賦值绍填,然后返回個(gè)字符串頁(yè)面,設(shè)置session栖疑,另一個(gè)是獲取session,我們根據(jù)session的內(nèi)容讨永,返回獲取到的內(nèi)容,這里注意age是int要拼接要變成str遇革。然后如下配置urls

圖67

配置完卿闹,就可以演示session配置了,我們之前說(shuō)了session存儲(chǔ)在django的django_session表中萝快,我們新開(kāi)終端進(jìn)入mysql锻霎,切換到我們的數(shù)據(jù)庫(kù),可以看到表里有個(gè)我們說(shuō)的揪漩,得到驗(yàn)證旋恼,

圖68

我們可以select * from django_session;查看內(nèi)容,可以看到已經(jīng)放了一堆亂七八糟的內(nèi)容奄容,如下蚌铜,我們可以把之前的session給刪掉delete from django_session;此時(shí)表格記錄為0

圖69

我們?cè)L問(wèn)set_session嫩海,我們可以看到django給我們返回了響應(yīng)cookie,里面的鍵名sessionid囚痴,值是一堆很長(zhǎng)的

圖70

我們可以通過(guò)查看表格叁怪,發(fā)現(xiàn)django_session表多了一條記錄,其中session_key的第一條和上圖的sessionid值一樣深滚,當(dāng)然我們還能看到session_data值奕谭,也是很長(zhǎng)一串,這部分是經(jīng)過(guò)base64加密的

圖71

我們可以百度一個(gè)base64解碼的網(wǎng)站痴荐,復(fù)制值粘貼過(guò)去血柳,可以看到是我們給session添加的信息

圖72

我們同樣可以登錄getsession可以看到我們請(qǐng)求時(shí)帶著sessionid發(fā)過(guò)去的,同時(shí)我們的頁(yè)面也展示了session信息生兆,具體怎么拿的难捌,這部分是django默認(rèn)封裝好了,我們只需要知道通過(guò)request.session來(lái)取就行

圖73

session對(duì)象的方法

圖74

對(duì)于讀取設(shè)置,1,2條不用說(shuō)了根吁。第3條员淫,clear是只給我們session傳入值的部分去掉,記錄還在击敌,

圖75

我們視圖函數(shù)寫(xiě)個(gè)清除函數(shù)介返,urls里配置,然后我們先訪(fǎng)問(wèn)clear_session沃斤,然后可以看到表格里數(shù)據(jù)==后面沒(méi)了圣蝎,

圖76

我們解碼也會(huì)發(fā)現(xiàn)后邊變成空字典

圖77

request.session.flush()是直接清除session記錄,表格整行

del request.session[鍵名]刪除記錄data中的某項(xiàng)數(shù)據(jù)

圖78

request.session.set_expiry(value)是設(shè)置超時(shí)時(shí)間衡瓶,value不寫(xiě)徘公,默認(rèn)2周,其他是秒數(shù)單位的整數(shù)鞍陨,0即關(guān)閉就session過(guò)期


案例步淹,記住用戶(hù)登錄狀態(tài)

如果用戶(hù)登錄過(guò),我們就記住用戶(hù)登錄狀態(tài)诚撵,下次直接登錄

圖79

我們給login_check視圖函數(shù)中給session添加islogin屬性缭裆,如果賬號(hào)密碼對(duì)上,就設(shè)置為T(mén)rue

圖80

我們修改login函數(shù)寿烟,對(duì)session對(duì)象的islogin屬性判斷澈驼,我們可以使用session對(duì)象的has_key(鍵名字符串)判斷

如果已登錄,就返回Index頁(yè)面筛武,否則就將之前寫(xiě)登錄的部分寫(xiě)到else里缝其,

這樣我們登錄過(guò)舊能實(shí)現(xiàn)直接轉(zhuǎn)到index頁(yè)面,

圖81

cookie和session應(yīng)用場(chǎng)景徘六,cookie記住用戶(hù)名内边,安全性要求不高,session涉及到安全比較高的數(shù)據(jù)待锈,保存到服務(wù)端

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漠其,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子竿音,更是在濱河造成了極大的恐慌和屎,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春瞬,死亡現(xiàn)場(chǎng)離奇詭異柴信,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)宽气,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)随常,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)潜沦,“玉大人,你說(shuō)我怎么就攤上這事线罕≈钩保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵钞楼,是天一觀的道長(zhǎng)喇闸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)询件,這世上最難降的妖魔是什么燃乍? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮宛琅,結(jié)果婚禮上刻蟹,老公的妹妹穿的比我還像新娘。我一直安慰自己嘿辟,他們只是感情好舆瘪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著红伦,像睡著了一般英古。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上昙读,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天召调,我揣著相機(jī)與錄音,去河邊找鬼蛮浑。 笑死唠叛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的沮稚。 我是一名探鬼主播艺沼,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蕴掏!你這毒婦竟也來(lái)了障般?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤囚似,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后线得,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饶唤,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年贯钩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了募狂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片办素。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖祸穷,靈堂內(nèi)的尸體忽然破棺而出性穿,到底是詐尸還是另有隱情,我是刑警寧澤雷滚,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布需曾,位于F島的核電站,受9級(jí)特大地震影響祈远,放射性物質(zhì)發(fā)生泄漏呆万。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一车份、第九天 我趴在偏房一處隱蔽的房頂上張望谋减。 院中可真熱鬧,春花似錦扫沼、人聲如沸出爹。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)严就。三九已至,卻和暖如春伴找,著一層夾襖步出監(jiān)牢的瞬間盈蛮,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工技矮, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留抖誉,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓衰倦,卻偏偏與公主長(zhǎng)得像袒炉,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子樊零,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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