日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Django 中 cookie的使用

發(fā)布時(shí)間:2025/4/16 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django 中 cookie的使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Cookie是瀏覽器在客戶端留下的一段記錄,這段記錄可以保留在內(nèi)存或者硬盤上。因?yàn)镠ttp請(qǐng)求是無(wú)狀態(tài)的,通過(guò)讀取cookie的記錄,服務(wù)器或者客戶端可以維持會(huì)話中的狀態(tài)。比如一個(gè)常見的應(yīng)用場(chǎng)景就是登錄狀態(tài)。Django里面,對(duì)cookie的讀取和設(shè)置很簡(jiǎn)單。Cookie本身的格式類似字典,因此可以通過(guò)request的key或者get獲取;然后他的設(shè)置則是通過(guò)response對(duì)象的set_cookie設(shè)定; 如果要取消cookie,把過(guò)期時(shí)間設(shè)置為當(dāng)前時(shí)間就行了。


獲取Cookie:

1 2 3 4 5 6 request.COOKIES['key'] request.get_signed_cookie(key,?default=RAISE_ERROR,?salt='',?max_age=None) ????參數(shù): ????????default:?默認(rèn)值 ????????salt:?加密鹽 ????????max_age:?后臺(tái)控制過(guò)期時(shí)間


設(shè)置Cookie:

1 2 3 4 5 6 7 8 9 10 11 12 13 rep?=?HttpResponse(...)?或?rep?=?render(request,?...) ?? rep.set_cookie(key,value,...) rep.set_signed_cookie(key,value,salt='加密鹽',...) ????參數(shù): ????????key,??????????????鍵 ????????value='',?????????值 ????????max_age=None,?????超時(shí)時(shí)間 ????????expires=None,?????超時(shí)時(shí)間(IE?requires?expires,?so?set?it?if?hasn't?been?already.) ????????path='/',?????????Cookie生效的路徑,/?表示根路徑,特殊的:跟路徑的cookie可以被任何url的頁(yè)面訪問(wèn) ????????domain=None,??????Cookie生效的域名 ????????secure=False,?????https傳輸 ????????httponly=False????只能http協(xié)議傳輸,無(wú)法被JavaScript獲取(不是絕對(duì),底層抓包可以獲取到也可以被覆蓋)



例1 ?設(shè)置一個(gè)login登錄界面,一個(gè)index登錄成功之后的跳轉(zhuǎn)界面,如果沒(méi)有登錄那么自動(dòng)跳轉(zhuǎn)到登錄界面


views.py?

1 2 3 4 5 6 def?index(reqeust): ????#?獲取當(dāng)前已經(jīng)登錄的用戶 ????v?=?reqeust.COOKIES.get('username111') ????if?not?v: ????????return?redirect('/login/') ????return?render(reqeust,'index.html',{'current_user':?v})

注意Cookie的超時(shí)時(shí)間有2種方式,一個(gè)是直接指定max_age(N秒后超時(shí)),一個(gè)是指定expires后面跟一個(gè)具體的時(shí)間對(duì)象

httponly可以禁止JavaScript獲取這個(gè)值,但是實(shí)際上沒(méi)有什么鳥用,chrome或者抓包都能輕松獲取所有的cookie



index.html

1 2 3 4 5 6 7 8 9 10 <!DOCTYPE?html> <html?lang="en"> <head> ????<meta?charset="UTF-8"> ????<title></title> </head> <body> ????<h1>歡迎登錄:{{?current_user?}}</h1> </body> </html>


login.html

1 2 3 4 5 6 7 8 9 10 11 12 13 14 <!DOCTYPE?html> <html?lang="en"> <head> ????<meta?charset="UTF-8"> ????<title></title> </head> <body> ????<form?action="/login/"?method="POST"> ????????<input?type="text"?name="username"?placeholder="用戶名"?/> ????????<input?type="password"?name="pwd"?placeholder="密碼"?/> ????????<input?type="submit"?/> ????</form> </body> </html>


例2:

現(xiàn)實(shí)生活中,一般是把這個(gè)驗(yàn)證cookie的功能寫成裝飾器,這樣直接在其他函數(shù)上面調(diào)用就行了

把例1改一下

1 2 3 4 5 6 7 8 9 10 11 12 13 def?auth(func): ????def?inner(reqeust,*args,**kwargs): ????????v?=?reqeust.COOKIES.get('username111') ????????if?not?v: ????????????return?redirect('/login/') ????????return?func(reqeust,?*args,**kwargs) ????return?inner ????? @auth def?index(reqeust): ????#?獲取當(dāng)前已經(jīng)登錄的用戶 ????v?=?reqeust.COOKIES.get('username111') ????return?render(reqeust,'index.html',{'current_user':?v})


例3: 我們知道可以使用fbv或者cbv來(lái)路由函數(shù)。例2使用了fbv的方式,用cbv也能實(shí)現(xiàn)

cbv里面,如果只打算裝飾一個(gè)方法,那么直接在方法前面加個(gè)@method_decorator就行;如果打算裝飾這個(gè)類里面所有的方法,那么在整個(gè)類的最上面進(jìn)行裝飾


views.py

1 2 3 4 5 6 7 8 9 10 11 12 @method_decorator(auth,name='dispatch') class?Order(views.View): ????#?@method_decorator(auth) ????#?def?dispatch(self,?request,?*args,?**kwargs): ????#?????return?super(Order,self).dispatch(request,?*args,?**kwargs) ????#?@method_decorator(auth) ????def?get(self,reqeust): ????????v?=?reqeust.COOKIES.get('username111') ????????return?render(reqeust,'index.html',{'current_user':?v}) ????def?post(self,reqeust): ????????v?=?reqeust.COOKIES.get('username111') ????????return?render(reqeust,'index.html',{'current_user':?v})


urls.py

1 ??url(r'^order/',?views.Order.as_view()),


例4 我們還可以通過(guò)JavaScript或者JQuery來(lái)設(shè)置Cookie,比如在前面分頁(yè)的代碼基礎(chǔ)上,我們?cè)黾右粋€(gè)自定義顯示行數(shù)的功能。


user_list.html ?這里下了一個(gè)JQuery的插件,這樣讀取設(shè)置cookie比較容易;而且,我們還限制了cookie的使用范圍,不是默認(rèn)的所有范圍,而是僅僅局限于/user_list這個(gè)路徑里面

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 <!DOCTYPE?html> <html?lang="en"> <head> ????<meta?charset="UTF-8"> ????<title></title> ????<style> ????????.go{ ????????????width:20px; ?????????????border:?solid?1px; ????????????color:?#66512c; ????????????display:?inline-block; ????????????padding:?5px; ????????} ????????.pagination?.page{ ????????????border:?solid?1px; ????????????color:?#66512c; ????????????display:?inline-block; ????????????padding:?5px; ????????????background-color:?papayawhip; ????????????margin:?5px; ????????} ????????.pagination?.page.active{ ????????????background-color:?brown; ????????????color:?white; ????????} ????</style> </head> <body> ????<ul> ????????{%?for?item?in?li?%} ????????????{%?include?'li.html'?%} ????????{%?endfor?%} ????</ul> ????<div> ????????<select?id="ps"?onchange="changePageSize(this)"> ????????????<option?value="10">10</option> ????????????<option?value="30">30</option> ????????????<option?value="50">50</option> ????????????<option?value="100">100</option> ????????</select> ????</div> ????<div?class="pagination"> ????????{{?page_str?}} ????</div> ????<script?src="/static/jquery-1.12.4.js"></script> ????<script?src="/static/jquery.cookie.js"></script> ????<script> ????????$(function(){ ????????????????var?v?=?$.cookie('per_page_count',?{'path':?"/user_list/`"}); ????????????????console.log(v) ????????????????$('#ps').val(v); ????????}); ????????function?changePageSize(ths){ ????????????var?v?=?$(ths).val(); ????????????console.log(v); ????????????$.cookie('per_page_count',v,?{'path':?"/user_list/"});?????????? ????????????location.reload(); ????????} ????</script> </body> </html>



views.py ?從前端獲取每頁(yè)行數(shù),實(shí)例化的時(shí)候傳遞給我們的分頁(yè)類

1 2 3 4 5 6 7 8 9 10 def?user_list(request): ????current_page?=?request.GET.get('p',?1) ????current_page?=?int(current_page) ????val?=?request.COOKIES.get('per_page_count',10) ????val?=?int(val) ????page_obj?=?pagination.Page(current_page,len(LIST),val) ????data?=?LIST[page_obj.start:page_obj.end] ????page_str?=?page_obj.page_str("/user_list/") ????return?render(request,?'user_list.html',?{'li':?data,'page_str':?page_str})







本文轉(zhuǎn)自 beanxyz 51CTO博客,原文鏈接:http://blog.51cto.com/beanxyz/1956951,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的Django 中 cookie的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产极品美女高潮无套嗷嗷叫酒店 | 国内自拍偷拍网 | 国内自拍欧美 | 日韩久久久 | 亚洲一区二区天堂 | a免费看 | 国产中文字幕网 | 国产第3页 | 99re这里只有精品在线观看 | 中文字幕在线视频一区二区 | 日本成人片在线 | 欧美日韩一二三 | 中文字幕 视频一区 | 色婷婷一区二区三区四区 | 国产美女无遮挡免费 | 欧美黑人一区二区三区 | 中国一级大黄大黄大色毛片 | 欧美激情免费观看 | 亚洲黄色成人网 | 护士人妻hd中文字幕 | 色呦呦一区二区 | 曰曰操| 黄色大片儿. | 日韩欧美大陆 | 男人的天堂视频网站 | 日韩性网 | 久久久亚洲精品视频 | 真实人妻互换毛片视频 | 国产亚洲精品美女久久久久 | 麻豆免费在线 | 日韩中文在线一区 | 人人妻人人澡人人爽欧美一区双 | 亚洲国产中文字幕在线观看 | a点w片| 亚洲熟女综合色一区二区三区 | 美女屁股无遮挡 | 亚洲30p | 又粗又猛又爽又黄少妇视频网站 | 久久久在线观看 | 69综合| 亚洲激情视频一区 | 久久精品国产亚洲av嫖农村妇女 | 四虎视频在线观看 | 91精品国产高清一区二区三蜜臀 | 久久男人网 | 精品国产视频一区二区 | 欧美一性一交 | 国模私拍在线观看 | 小伸进喷水网站 | 国产大片中文字幕 | 芒果视频在线观看免费 | 一区二区成人网 | 精品久久电影 | 色中文字幕在线观看 | 亚洲美女视频 | 懂色av一区二区 | 中文字幕一区二区三区手机版 | 六月婷婷久久 | 日产亚洲一区二区三区 | 欧美日批 | 国产精品88久久久久久妇女 | 特大黑人娇小亚洲女 | 麻豆视频在线播放 | 精品一区二区三区人妻 | 能看的毛片 | 在哪看毛片 | 久久久久亚洲AV | 成年人在线视频网站 | 精品处破女学生 | 岛国片免费在线观看 | aa在线视频 | 欧美性xxxxxxxxx | 欧美精品一区二区三区久久久 | 中文字幕人妻精品一区 | 免费在线观看毛片视频 | 亚洲最大福利视频 | 亚洲精品久久一区二区三区777 | 91精品在线观看视频 | 涩涩的视频在线观看 | 中文字幕av影院 | www.久久综合 | 青青草免费在线观看视频 | 艳妇乳肉亭妇荡乳av | 中文字幕大全 | 日韩国产欧美一区二区 | 亚洲第一视频在线播放 | 精品一区二区久久久久蜜桃 | 在线观看黄色大片 | 亚洲成人第一区 | 美女av一区二区 | 四虎精品一区二区 | 又色又爽又黄gif动态图 | 教练含着她的乳奶揉搓揉捏动态图 | 波多野结衣激情视频 | 最新中文字幕在线观看视频 | 制服丝袜第二页 | 艹男人的日日夜夜 | 日韩视频一二三区 | 欧美成人国产va精品日本一级 |