Django使用中間鍵實(shí)現(xiàn)csrf認(rèn)證詳解
Django中的csrf認(rèn)證實(shí)現(xiàn)的原理
調(diào)用 process_view 方法
檢查視圖是否被 @csrf_exempt (免除csrf認(rèn)證)
- 去請(qǐng)求體或cookie中獲取token
情況一(全站使用csrf認(rèn)證,局部不想使用csrf認(rèn)證)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # 全站使用csrf認(rèn)證 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
如果我想讓某個(gè)請(qǐng)求不通過(guò)csrf認(rèn)證可以這樣做
from django.views.decorators.csrf import csrf_exempt @csrf_exempt # 該函數(shù)無(wú)需認(rèn)證 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list)))
情況二(全站不使用csrf認(rèn)證,局部想使用csrf認(rèn)證)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', # 全站不使用csrf認(rèn)證 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
如果我想讓某個(gè)請(qǐng)求使用csrf認(rèn)證可以這樣做
from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect # 該函數(shù)需認(rèn)證 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list)))
CBV小知識(shí),csrf時(shí)需要使用
- @method_decorator(csrf_exempt)
- 在dispatch方法中(單獨(dú)方法無(wú)效)
方式一
from django.views.decorators.csrf import csrf_exempt,csrf_protect from django.utils.decorators import method_decorator class StudentsView(View): @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(StudentsView,self).dispatch(request, *args, **kwargs) def get(self,request,*args,**kwargs): print('get方法') return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE')
方式二
from django.views.decorators.csrf import csrf_exempt,csrf_protect from django.utils.decorators import method_decorator @method_decorator(csrf_exempt,name='dispatch') class StudentsView(View): def get(self,request,*args,**kwargs): print('get方法') return HttpResponse('GET') def post(self, request, *args, **kwargs): return HttpResponse('POST') def put(self, request, *args, **kwargs): return HttpResponse('PUT') def delete(self, request, *args, **kwargs): return HttpResponse('DELETE')
總結(jié):
- - 本質(zhì),基于反射來(lái)實(shí)現(xiàn)
- - 流程:路由,view,dispatch(反射)
- - 取消csrf認(rèn)證(裝飾器要加到dispatch方法上且method_decorator裝飾)
擴(kuò)展:
- - csrf
- - 基于中間件的process_view方法
- - 裝飾器給單獨(dú)函數(shù)進(jìn)行設(shè)置(認(rèn)證或無(wú)需認(rèn)證)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python如何統(tǒng)計(jì)字符串中字符的個(gè)數(shù)
這篇文章主要給大家介紹了關(guān)于python如何統(tǒng)計(jì)字符串中字符的個(gè)數(shù)的相關(guān)資料,如果在一個(gè)字符串中,需要統(tǒng)計(jì)某個(gè)字符或字符串出現(xiàn)的次數(shù),可以使用count方法,需要的朋友可以參考下2023-10-10python實(shí)現(xiàn)flappy bird游戲
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)flappy bird游戲,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12python目標(biāo)檢測(cè)YoloV4當(dāng)中的Mosaic數(shù)據(jù)增強(qiáng)方法
這篇文章主要為大家介紹了python目標(biāo)檢測(cè)YoloV4當(dāng)中的Mosaic數(shù)據(jù)增強(qiáng)方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼程序
這篇文章主要介紹了Python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼程序,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11由面試題加深對(duì)Django的認(rèn)識(shí)理解
這篇文章主要介紹了由面試題加深對(duì)Django的認(rèn)識(shí),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07Tensorflow實(shí)現(xiàn)多GPU并行方式
今天小編就為大家分享一篇Tensorflow實(shí)現(xiàn)多GPU并行方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Django動(dòng)態(tài)展示Pyecharts圖表數(shù)據(jù)的幾種方法
本文主要介紹了Django動(dòng)態(tài)展示Pyecharts圖表數(shù)據(jù)的幾種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-08-08matplotlib繪圖實(shí)例演示標(biāo)記路徑
這篇文章主要介紹了matplotlib繪圖實(shí)例演示標(biāo)記路徑,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01python實(shí)現(xiàn)下載指定網(wǎng)址所有圖片的方法
這篇文章主要介紹了python實(shí)現(xiàn)下載指定網(wǎng)址所有圖片的方法,涉及Python針對(duì)頁(yè)面的讀取、遍歷及文件操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08Python實(shí)現(xiàn)提取語(yǔ)句中的人名
這篇文章主要為大家介紹一個(gè)小工具:可以將語(yǔ)句中的人名提取出來(lái)。文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-01-01