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 Json讀寫(xiě)操作之JsonPath用法詳解
JSONPath是一種信息抽取類(lèi)庫(kù),是從JSON文檔中抽取指定信息的工具,提供多種語(yǔ)言實(shí)現(xiàn)版本,包括Javascript、Python、PHP和Java,這篇文章主要介紹了Python Json讀寫(xiě)操作之JsonPath用法詳解,需要的朋友可以參考下2023-04-04
python進(jìn)階教程之文本文件的讀取和寫(xiě)入
這篇文章主要介紹了python進(jìn)階教程之文本文件的讀取和寫(xiě)入,本文講解的是最基本的文件讀取和寫(xiě)入功能,需要的朋友可以參考下2014-08-08
關(guān)于Python解包知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給各位分享的是關(guān)于Python解包知識(shí)點(diǎn)總結(jié),有興趣的朋友們可以學(xué)習(xí)參考下。2020-05-05
Python+selenium實(shí)現(xiàn)截圖圖片并保存截取的圖片
這篇文章介紹如何利用Selenium的方法進(jìn)行截圖并保存截取的圖片,需要的朋友參考下本文2018-01-01
Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法
這篇文章主要介紹了Python實(shí)現(xiàn)將doc轉(zhuǎn)化pdf格式文檔的方法,結(jié)合實(shí)例形式分析了Python實(shí)現(xiàn)doc格式文件讀取及轉(zhuǎn)換pdf格式文件的操作技巧,以及php調(diào)用py文件的具體實(shí)現(xiàn)方法,需要的朋友可以參考下2018-01-01
Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫(kù)導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法
這篇文章主要介紹了Python實(shí)現(xiàn)將sqlite數(shù)據(jù)庫(kù)導(dǎo)出轉(zhuǎn)成Excel(xls)表的方法,結(jié)合實(shí)例形式分析了Python針對(duì)sqlite數(shù)據(jù)庫(kù)的連接、讀取及使用寫(xiě)操作包(xlwt)生成Excel表的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-07-07
詳解Python3除法之真除法、截?cái)喑ê拖氯≌麑?duì)比
這篇文章主要介紹了詳解Python3除法之真除法、截?cái)喑ê拖氯≌麑?duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05

