Cookie、Session、CBV加裝飾器的三種方法

【0】cookie、session和Token的發展史

【1】Cookie的形式

  • 存儲形式:k:v鍵值對
  • 存儲位置:客戶端
  • 缺點:不安全,信息可能會泄露

【2】session的形式

  • 標識符,表示我是當前用戶加密出來的數據
  • 對敏感信息進行加密處理
    • 存儲服務端
    • 標識符配合上你的加密串
  • 把某個數據的標識符+字符串全給服務端
    • 客戶端存儲格式
      • session_id:返回回來的標識符+加密串

【3】Cookie方法

? ? ? ? 【3.1】設置Cookie

obj = HttpResponse('ok')obj.set_cookie('K','V')'''
HttpResponse:django的三板斧,返回的是字符串.set_cookie('k','v')  -------------  設置cookie  k:key值   v:value值設置cookie是不只是使用django三板斧中的HttpResponse,其余兩個都能使用'''

? ? ? ? 【3.2】cookie取值

request.COOKIES.get('k')

? ? ? ? 【3.3】設置過期時間

obj.set_cookie('k','v',expires=3)obj.set_cookie('k','v',max_age=3)'''
expires:設置超時時間,單位為秒max_age:設置超時時間,單位為秒'''

? ? ? ? 【3.4】刪除cookie

def logout(request,*args,**kwargs):obj = redirect('/home/')obj.delete_cookie('sign')return obj

【4】Session

【4.1】session注意事項

  • session基于數據庫表才能使用
    • 必須先遷移數據庫,生層django_session表
  • session只對當次登錄有效
    • 主動清除瀏覽器中本地存在的session
    • 驗簽發現,沒有sessionid就會生成新的session
  • django_session表中的數據取決于瀏覽器
  • 同一個計算機(IP地址)上同一個瀏覽器只會有一條數據生效
  • 同一個計算機(IP地址)上多個瀏覽器會有多個數據生效
  • 當session過期的時候,可能會出現多條數據對應一個瀏覽器
    • 但是這些數據不會持久化存儲,會被定時清理掉,可以手動清除也可以代碼清除
  • 目的是為了節省服務器數據庫資源

? ? ? ? 【4.2】設置session

request.session['sign'] = 'user''''
sign  --------  k值user  --------  v值'''

? ? ? ? 【4.3】session取值

sign = request.session.get('sign')

? ? ? ? 【4.4】session設置過期時間

# 設置sessionrequest.session['key'] = 'value'# 設置過期時間request.session.set_expiry()'''
參數:1、整數:設置多少秒過期2、日期:設置到指定日期失效3、0:退出瀏覽器失效4、不寫:失效時間取決于Django內部全局session失效的時間'''

? ? ? ? 【4.5】清空session

def clear_session(request):request.session.delete()'''
request.session.delete(): 只刪除服務端1、該方法用于刪除當前用戶的Session數據,但會保留Session的Key2、這意味著Session對象本身仍然存在,但其中的數據將被清空3、下次訪問時,如果Session沒有被重新填充,則會得到一個空的Session對象簡而言之,就是使用request.session.delete()方法,會刪除瀏覽器端的session,數據庫中的數據不會被刪除'''
def clear_session(request):request.session.flush()'''
request.session.flush():服務端和客戶端都刪除該方法用于完全刪除當前用戶的Session,包括Session對象和所有相關數據下次訪問時,將創建一個新的空Session對象簡而言之,就是刪除了瀏覽器端和數據庫中的session '''

? ? ? ? 【4.6】保存session

????????

1. 數據庫Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db'   # 引擎(默認)2. 緩存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # 引擎
SESSION_CACHE_ALIAS = 'default'                            # 使用的緩存別名(默認內存緩存,也可以是memcache),此處別名依賴緩存的設置3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file'    # 引擎
SESSION_FILE_PATH = None                                    # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個臨時地址tempfile.gettempdir() 4. 緩存+數據庫
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'        # 引擎5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'   # 引擎其他公用設置項:
SESSION_COOKIE_NAME = "sessionid"                       # Session的cookie保存在瀏覽器上時的key,即:sessionid=隨機字符串(默認)
SESSION_COOKIE_PATH = "/"                               # Session的cookie保存的路徑(默認)
SESSION_COOKIE_DOMAIN = None                             # Session的cookie保存的域名(默認)
SESSION_COOKIE_SECURE = False                            # 是否Https傳輸cookie(默認)
SESSION_COOKIE_HTTPONLY = True                           # 是否Session的cookie只支持http傳輸(默認)
SESSION_COOKIE_AGE = 1209600                             # Session的cookie失效日期(2周)(默認)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False                  # 是否關閉瀏覽器使得Session過期(默認)
SESSION_SAVE_EVERY_REQUEST = False                       # 是否每次請求都保存Session,默認修改之后才保存(默認)

【5】CBV加裝飾器的三種方法

from django.utils.decorators import method_decorator# 方式二:放在類視圖上面 (放的裝飾器函數,name指定你的視圖函數里面的方法)
# @method_decorator(login_auth, name='get')
# @method_decorator(login_auth, name='post')
class UserView(View):# 方式三 : dispactch 方法加裝飾器 : 本視圖函數內所有的視圖都需要走裝飾器@method_decorator(login_auth)def dispatch(self, request, *args, **kwargs):# Try to dispatch to the right method; if a method doesn't exist,# defer to the error handler. Also defer to the error handler if the# request method isn't on the approved list.if request.method.lower() in self.http_method_names:handler = getattr(self, request.method.lower(), self.http_method_not_allowed)else:handler = self.http_method_not_allowedreturn handler(request, *args, **kwargs)# 方式一:加在視圖函數上面# @method_decorator(login_auth)def get(self, request, *args, **kwargs):return HttpResponse("這是home頁面")

? ? ? ? ?【5.1】補充

CSRF Token相關裝飾器在CBV只能加到dispatch方法上

或者加在視圖類上然后name參數指定為dispatch方法。

?

備注:

csrf_protect ----------無論settings.py文件中的中間件中的csrf有沒有被注釋掉都會報錯

? ? ? ? 1、為當前函數強制設置防跨站請求偽造功能

? ? ? ? 2、即便settings中沒有設置中間件

?

????????

from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decoratorclass HomeView(View):@method_decorator(csrf_exempt)def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):print("Home View POST method...")return redirect("/index/")

?


csrf_exempt? ---------- settings.py文件中的中間件中的csrf沒有注釋掉也不會報錯

? ? ? ? 1、取消當前函數防跨站請求偽造功能

? ? ? ? 2、即便settings中設置了全局中間件

?

????????

from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator@method_decorator(csrf_exempt, name='dispatch')
class HomeView(View):def dispatch(self, request, *args, **kwargs):return super(HomeView, self).dispatch(request, *args, **kwargs)def get(self, request):return render(request, "home.html")def post(self, request):print("Home View POST method...")return redirect("/index/")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160248.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160248.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160248.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

排序算法-----快速排序(非遞歸實現)

目錄 前言 快速排序 基本思路 非遞歸代碼實現 前言 很久沒跟新數據結構與算法這一欄了,因為數據結構與算法基本上都發布完了,哈哈,那今天我就把前面排序算法那一塊的快速排序完善一下,前面只發布了快速排序遞歸算法,…

單鏈表相關面試題--3.鏈表的中間節點

3.鏈表的中間節點 876. 鏈表的中間結點 - 力扣(LeetCode) /* 解題思路: 通過快慢指針找到中間節點,快指針每次走兩步,慢指針每次走一步,當快指針走到結尾的時候,慢指針正好走到中間位置 */ typ…

HTTPS協議的加密流程

目錄 一,HTTPS是什么 二,兩種加密方式 三,HTTPS的加密過程 3.1 引入對稱加密 3.2 引入非對稱加密 3.3 引入證書 一,HTTPS是什么 HTTPS也是一個應用層協議,它是在HTTP協議的基礎上引入了一個加密層。因為HTTP協議…

每天一道算法題(十)——獲取和為k的子數組

文章目錄 1、問題2、示例3、解決方法(1)方法1——雙指針 總結 1、問題 給你一個整數數組 nums 和一個整數 k ,請你統計并返回 該數組中和為 k 的子數組的個數 。 子數組是數組中元素的連續非空序列。 2、示例 示例 1: 輸入&#x…

多分類自定義采樣比例

多分類自定義采樣比例 import torch from torch.utils.data import DataLoader, Dataset, WeightedRandomSampler from torchvision import transforms from torchvision.datasets import ImageFolder# 假設你有一個自定義的數據集類 class CustomDataset(Dataset):def __init…

51單片機按鍵控制LED燈亮滅的N個玩法

51單片機按鍵控制LED燈亮滅的N個玩法 1.概述 這篇文章介紹按鍵的使用,以及通過控制LED燈的小實驗,發現按鍵中存在的問題,然后思考并解決這些問題。達到熟練使用按鍵控制元器件。 2.搭建硬件環境 1.硬件準備 名稱型號數量單片機STC12C205…

2023全球數字貿易創新大賽9-12

目錄 回答評委提問:先說痛點-再說怎樣解決 食品安全溯源是否全流程 星火? 鏈網

Sleuth

Sleuth 一 引言 隨著服務的越來越多,對調?鏈的分析會越來越復雜。它們之間的調?關系也許如下圖: 問題: 1:微服務之間的調?錯綜復雜,?戶發送的請求經歷那些服務,調?鏈不清楚,沒有? 個?…

【SpringCloud微服務全家桶學習筆記-Hystrix(服務降級,熔斷,接近實時的監控,服務限流等)】

服務雪崩 (微服務面臨的問題) 多個微服務之間調用的時候,假設微服務A調用微服務B和微服務C,微服務B和微服務C又調用其它的微服務,這就是所謂的“扇出”。如果扇出的鏈路上某個微服務的調用響應時間過長或者不可用&…

HarmonyOS開發(五):常用基礎組件

1、組件介紹 組件(Component),是界面搭建及顯示的最小單元。 組件根據功能可以分為五大類:基礎組件、容器組件、媒體組件、繪制組件、畫布組件 2、基礎組件 基礎組件是視圖層的基本組成單元,它包含:Text、Image、T…

OpenCV C++ 張正友相機標定【相機標定原理、相機標定流程、圖像畸變矯正】

文章目錄 3.1 標定原理3.2 相機標定流程步驟1:采集棋盤格圖像,批處理(調整尺寸、重命名)步驟2:提取棋盤格內角點坐標步驟3:進一步提取亞像素角點信息在棋盤標定圖上繪制找到的內角點(非必須,僅為了顯示)步驟4:相機標定--計算出相機內參數矩陣和畸變系數步驟5:畸變圖像…

Spring (二)@Order, Ordered 失效

Spring (二)Order, Ordered 失效 先上例子 public class OrderAnnotationExample {Order(2)static class MyBeanFactoryPostProcessor1 implements BeanFactoryPostProcessor {Overridepublic void postProcessBeanFactory(ConfigurableListableBeanFa…

如何加速JavaScript 代碼運行速度

如何加速JavaScript 代碼運行速度 前言減少DOM訪問避免不必要的變量延遲script加載異步和同步使用異步編程避免使用With關鍵詞 前言 本文主要通過五個方面來講解如何使Js代碼得到性能優化,從而實現加快Js代碼運行速度的作用。那么好,本文正式開始。 減…

感染了后綴為.[bkpsvr@firemail.cc].EKING勒索病毒如何應對?數據能夠恢復嗎?

導言: 在當前數字時代,勒索病毒成為網絡威脅的一大隱患。本文將深入介紹一種名為[bkpsvrfiremail.cc].EKING的勒索病毒,以及如何應對遭受其攻擊后,有效地恢復被加密的數據文件,并提供一些預防措施以減少感染的風險。數…

sqlserver==索引解析,執行計劃,索引大小

1創建測試表 -- 創建大型表 CREATE TABLE LargeTableWithIndex (ID int IDENTITY(1,1) PRIMARY KEY,IndexedColumn int,NonIndexedColumn nvarchar(255),OtherData nvarchar(255) );2插入測試數據 -- 使用 T-SQL 插入大量數據 DECLARE @i int = 1; WHILE @i <= 100000 -- …

Mac中LaTex無法編譯的問題

最近在使用TexStudio時&#xff0c;遇到一個棘手的問題&#xff1a; 無法編譯&#xff0c;提示如下&#xff1a; kpathsea: Running mktexfmt xelatex.fmt /Library/TeX/texbin/mktexfmt: kpsewhich -var-valueTEXMFROOT failed, aborting early. BEGIN failed–compilation a…

[Linux] Network: IPv6 link-local 地址是否可用不自動生成

原來有一段時間在做擴充產品的VLAN個數&#xff0c;然后就遇到過一個問題&#xff1a;說這個Linux的默認配置里&#xff0c;會為每一個網絡接口添加一個link-local的地址&#xff0c;就是FE80::開頭的地址&#xff0c;在RFC-4291里有如下的定義&#xff1a; Link-Local unicas…

redis運維(十二) 位圖

一 位圖 ① 概念 1、說明&#xff1a;位圖還是在操作字符串2、位圖玩字符串在內存中存儲的二進制3、ASCII字符通過映射轉化為二進制4、操作的是字符串value ② ASCII字符鋪墊 1、控制ASCII字符 2、ASCII可顯示字符 ③ SETBIT 細節&#xff1a; setbit 命令的返回值是之…

git常用命令(git github ssh)

目錄 1、語法說明2、本地倉庫相關操作建立一個git文件(git init)把工作區的文件添加到暫存區(git add)把暫存區的文件添加到本地倉庫(git commit)查看暫存區和本地倉庫中的文件(git ls-files)查看文件夾下所有文件的狀態(git status)查看版本庫中的提交記錄(git log)恢復的文件…