功能
簡(jiǎn)單回顧盒发,視圖功能,接收請(qǐng)求玛迄,進(jìn)行處理由境,和M.T交互,返回應(yīng)答
我開(kāi)門(mén)可以返回HttpResponse頁(yè)面蓖议,也可以返回HttpResponseResdirect
使用
首先我們要定義視圖函數(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ù)
所以我們記住每次參與匹配的只有我們請(qǐng)求資源的部分,即如上圖的index
如果資源匹配不成功囤捻,我們會(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 ?!!!!!
我們?nèi)绻l(fā)布了,就需要給項(xiàng)目的settings.py里找到DEBUG = True 將其修改為False
我們只設(shè)置DEBUG = False還不夠
日志會(huì)提醒我們要設(shè)置ALLOWED_HOSTS丹壕,
我們繼續(xù)在setting.py下面設(shè)置ALLOWED_HOSTS = ['*']即可以訪(fǎng)問(wèn)的主機(jī)不限
我們繼續(xù)訪(fǎng)問(wèn)不存在資源就會(huì)看到如上的頁(yè)面
如果我們想自己設(shè)置這個(gè)頁(yè)面庆械,可以在templates下面創(chuàng)建一個(gè)404.html 如下
如果用戶(hù)訪(fǎng)問(wèn)不存在資源,會(huì)將request_path傳給這個(gè)頁(yè)面菌赖,我們可以在頁(yè)面上顯示缭乘,而這個(gè)html我們不用給其配置視圖也不用管urls,django會(huì)自動(dòng)給我們顯示琉用,如下圖
同理我們?nèi)绻?wù)端代碼出現(xiàn)問(wèn)題堕绩,如果我們?cè)O(shè)置非DEBUG,django會(huì)給我們一個(gè)500頁(yè)面
我們也可以自己設(shè)置這個(gè)頁(yè)面邑时,在目標(biāo)文件夾下創(chuàng)建500.html奴紧,如下
我們網(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ò)誤提示信息沫浆,
如圖中嘗試將字符串和數(shù)字拼接(這里是人為故意設(shè)置)
urls參數(shù)捕獲
我們之前說(shuō)了如果我們捕獲參數(shù),url(r'args(\d+)',views.showargs)滚秩,正則部分會(huì)把請(qǐng)求資源的數(shù)字部分當(dāng)做參數(shù)傳給視圖函數(shù)专执,所以視圖函數(shù)除了request參數(shù),也一定要把這部分傳入
我們還可以使用正則表達(dá)式起組名的方式
我們?cè)O(shè)置完組名郁油,給函數(shù)傳遞參數(shù)也必須用這個(gè)組名本股,否則會(huì)報(bào)錯(cuò)
登錄案例
我們之前講了視圖函數(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è)提交按鈕
頁(yè)面提交我們?cè)O(shè)置給login_check
我們給urls配置login,但是視圖函數(shù)先空著寫(xiě)個(gè)返回login.html渲染
我們?cè)诰W(wǎng)頁(yè)訪(fǎng)問(wèn)login誊稚,填寫(xiě)信息后翔始,會(huì)發(fā)現(xiàn)404,當(dāng)然我們沒(méi)寫(xiě)login_check里伯,我們可以看到審查元素里有我們提到的表單信息
我們現(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肩碟,如下圖
我們后面會(huì)介紹為什么會(huì)403强窖,我們這里為了不看見(jiàn)403,要給項(xiàng)目settings.py的一行注釋掉削祈,如上圖
后臺(tái)日志可以看到類(lèi)型為django.http.request.QueryDict類(lèi)型翅溺,所以request的GET和POST都是QueryDict類(lèi)型,為了看怎么使用岩瘦,我們?nèi)hell里運(yùn)行下
我們導(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è)置成了字符串
QueryDict允許一鍵多值握爷,比如我們[]或者get訪(fǎng)問(wèn)上圖'a'會(huì)得到最后一個(gè)值跛璧,想查看多值,可以用getlist(key)獲得多值列表
所以我們就可以通過(guò)使用鍵值來(lái)獲得賬號(hào)密碼新啼,鍵必須和我們之前input控件的name一致
然后下一步就是根據(jù)用戶(hù)名密碼在數(shù)據(jù)庫(kù)里進(jìn)行校驗(yàn)追城,根據(jù)情況返回頁(yè)面
我們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ù)有限
我們下面做一個(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
視頻中給文件夾放了個(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ě)
我們先在urls里寫(xiě)上2個(gè)頁(yè)面索引芥玉,一個(gè)是text_ajax資源的索引,另一個(gè)是我們ajax請(qǐng)求的ajax_handle索引
在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)單字典雪标,如下
我們剛才給ajax的success函數(shù)還沒(méi)有處理零院,我們這里就做個(gè)alert彈窗溉跃,把data(這個(gè)data就是接收到的數(shù)據(jù)字典,我們alert一下res鍵的值)
這里配置靜態(tài)資源的作用是告抄,我們?cè)L問(wèn)Js文件撰茎,但這個(gè)文件不需要經(jīng)過(guò)視圖函數(shù)處理,而是作為靜態(tài)資源給html打洼,否則會(huì)404(如果中間出現(xiàn)ajax錯(cuò)誤龄糊,我們就要用審查元素查看錯(cuò)誤)
下面談下登錄頁(yè)面,比如我們的登錄募疮,如果點(diǎn)擊登錄绎签,默認(rèn)會(huì)再請(qǐng)求一次網(wǎng)頁(yè),如果頁(yè)面資源比較多酝锅,用戶(hù)體驗(yàn)就會(huì)很差
我們對(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
我們的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
我們?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ù)
我們還是用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è)面
然后我們編寫(xiě)視圖函數(shù)骑祟,因?yàn)槭荘OST方法回懦,我們還是可以使用request.POST.get鍵值獲得屬性气笙,我們這里設(shè)置了個(gè)判斷,根據(jù)情況返回json格式結(jié)果怯晕,視圖函數(shù)寫(xiě)完進(jìn)行urls配置
配置完運(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)保持
然而有時(shí)候我們就是需要保持登錄狀態(tài),比如刷新頁(yè)面再登錄轴咱,還有點(diǎn)擊記住用戶(hù)名等等
http用于記住用戶(hù)信息有2種方式汛蝙,cookie和session
Cookie
形象形容,我去找老板買(mǎi)豆?jié){朴肺,老板給單子設(shè)置cookie窖剑,然后找老板拿豆?jié){,把單子給老板宇挫,這里我就是瀏覽器的角色苛吱,老板是服務(wù)器,單子就是cookie
我們上圖來(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ù)器
cookie存儲(chǔ)在瀏覽器端的小段文本,以鍵值對(duì)存儲(chǔ)欣除,有時(shí)間限制住拭,不指定,默認(rèn)是關(guān)閉
我們?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ù)如下
我們寫(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
配置好茧痕,我們就可以訪(fǎng)問(wèn)set_cookie
我們可以看到我們?cè)L問(wèn)的時(shí)候,收到了瀏覽器的響應(yīng)cookies num,1
我們還可以看到響應(yīng)頭里恼除,有Set_Cookie鍵踪旷,里面是我們的信息,這里其實(shí)是通過(guò)我們的set_cookie函數(shù)豁辉,通過(guò)返回的HttpResponse對(duì)象埃脏,將其變成響應(yīng)頭部分
上面我們保留了cookie,這次我們?cè)L問(wèn)get_cookie秋忙,可以看到頁(yè)面給我們返回1,在審查元素构舟,可以看到Cookie里得到num=1
我們?cè)赾ookies里也會(huì)看到request cookies num 1因?yàn)槲覀兪菐е鴆ookie請(qǐng)求的
我們說(shuō)過(guò)HttpResponse子類(lèi)也可以灰追,所以我們也可以是HttpRedirect,JsonResponse
cookie是有時(shí)間限制的的,比如我們關(guān)閉瀏覽器狗超,再?lài)L試訪(fǎng)問(wèn)get_cookie弹澎,就會(huì)報(bào)keyerror,我們也會(huì)看到cookie里沒(méi)有了num項(xiàng)
其實(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è)即可报强,推薦前者
我們?cè)O(shè)置時(shí)間后,訪(fǎng)問(wèn)set_cookie拱燃,可以看到cookies里多了時(shí)間14天
同樣秉溉,headers里Set_Cookie里也能看到有效時(shí)間等,當(dāng)然我們關(guān)了瀏覽器,也還能訪(fǎng)問(wèn)get_cookie了
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ì)是否勾選提示
我們現(xiàn)在函數(shù)里打印下這個(gè)remember的value看看是什么
可以看到未勾選后臺(tái)打印了個(gè)none
當(dāng)點(diǎn)擊勾選打印on,所以我們可以判斷是on記住用戶(hù)名碟绑,設(shè)置cookie俺猿,否則不設(shè)置
我們?cè)谝晥D函數(shù)里增加判斷如果用戶(hù)密碼正確,而且選了記住用戶(hù)名on格仲,我們返回redirect對(duì)象(redirect返回的是HttpResponse對(duì)象押袍,可以set_cookie),這里我們給cookie傳入username凯肋,
當(dāng)我們點(diǎn)擊勾選谊惭,且正確登錄,我們可以看到跳轉(zhuǎn)頁(yè)面里返回響應(yīng)cookies的用戶(hù)名
然后我們?yōu)榱讼麓蔚卿浺材苡涀∮脩?hù)名侮东,我們就在請(qǐng)求login資源的時(shí)候圈盔,利用COOKIES數(shù)據(jù),但是第一次可能沒(méi)有COOKIE,我們需要判斷悄雅,在就返回值否則返回空字符串驱敲,同時(shí),將字典作為渲染render的參數(shù)返回宽闲,
我們就同時(shí)修改login.html將input用戶(hù)名的地方value設(shè)置為我們傳入的username參數(shù)
這樣我們?cè)偎⑿聟?shù)就可以看到用戶(hù)名顯示在上面,
中間我半天出不來(lái)众眨,我才發(fā)現(xiàn)表單提交是通過(guò)name而不是id,我開(kāi)始把字符串都給id了容诬,蠢爆C淅妗!览徒!
Session
之前說(shuō)了cookie狈定,這回講session,比如我們辦健身卡习蓬,老板給你個(gè)卡號(hào)纽什,以后并卡號(hào)就可以健身
如上圖,當(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中
我們的session是存儲(chǔ)在服務(wù)器端的涕俗,用鍵值對(duì)存儲(chǔ)罗丰,依賴(lài)cookie,有過(guò)期時(shí)間再姑,默認(rèn)2周
我們?cè)O(shè)置獲取都是通估計(jì)request.session萌抵,用鍵名訪(fǎng)問(wèn),具體怎么實(shí)現(xiàn)的django框架幫你搞定
簡(jiǎn)單session讀取設(shè)置案例
我們給視圖函數(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
配置完卿闹,就可以演示session配置了,我們之前說(shuō)了session存儲(chǔ)在django的django_session表中萝快,我們新開(kāi)終端進(jìn)入mysql锻霎,切換到我們的數(shù)據(jù)庫(kù),可以看到表里有個(gè)我們說(shuō)的揪漩,得到驗(yàn)證旋恼,
我們可以select * from django_session;查看內(nèi)容,可以看到已經(jīng)放了一堆亂七八糟的內(nèi)容奄容,如下蚌铜,我們可以把之前的session給刪掉delete from django_session;此時(shí)表格記錄為0
我們?cè)L問(wèn)set_session嫩海,我們可以看到django給我們返回了響應(yīng)cookie,里面的鍵名sessionid囚痴,值是一堆很長(zhǎng)的
我們可以通過(guò)查看表格叁怪,發(fā)現(xiàn)django_session表多了一條記錄,其中session_key的第一條和上圖的sessionid值一樣深滚,當(dāng)然我們還能看到session_data值奕谭,也是很長(zhǎng)一串,這部分是經(jīng)過(guò)base64加密的
我們可以百度一個(gè)base64解碼的網(wǎng)站痴荐,復(fù)制值粘貼過(guò)去血柳,可以看到是我們給session添加的信息
我們同樣可以登錄getsession可以看到我們請(qǐng)求時(shí)帶著sessionid發(fā)過(guò)去的,同時(shí)我們的頁(yè)面也展示了session信息生兆,具體怎么拿的难捌,這部分是django默認(rèn)封裝好了,我們只需要知道通過(guò)request.session來(lái)取就行
session對(duì)象的方法
對(duì)于讀取設(shè)置,1,2條不用說(shuō)了根吁。第3條员淫,clear是只給我們session傳入值的部分去掉,記錄還在击敌,
我們視圖函數(shù)寫(xiě)個(gè)清除函數(shù)介返,urls里配置,然后我們先訪(fǎng)問(wèn)clear_session沃斤,然后可以看到表格里數(shù)據(jù)==后面沒(méi)了圣蝎,
我們解碼也會(huì)發(fā)現(xiàn)后邊變成空字典
而request.session.flush()是直接清除session記錄,表格整行
del request.session[鍵名]刪除記錄data中的某項(xiàng)數(shù)據(jù)
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)诚撵,下次直接登錄
我們給login_check視圖函數(shù)中給session添加islogin屬性缭裆,如果賬號(hào)密碼對(duì)上,就設(shè)置為T(mén)rue
我們修改login函數(shù)寿烟,對(duì)session對(duì)象的islogin屬性判斷澈驼,我們可以使用session對(duì)象的has_key(鍵名字符串)判斷
如果已登錄,就返回Index頁(yè)面筛武,否則就將之前寫(xiě)登錄的部分寫(xiě)到else里缝其,
這樣我們登錄過(guò)舊能實(shí)現(xiàn)直接轉(zhuǎn)到index頁(yè)面,
cookie和session應(yīng)用場(chǎng)景徘六,cookie記住用戶(hù)名内边,安全性要求不高,session涉及到安全比較高的數(shù)據(jù)待锈,保存到服務(wù)端