Django使用中間鍵實現(xiàn)csrf認證詳解
Django中的csrf認證實現(xiàn)的原理
調(diào)用 process_view 方法
檢查視圖是否被 @csrf_exempt (免除csrf認證)
- 去請求體或cookie中獲取token
情況一(全站使用csrf認證,局部不想使用csrf認證)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', # 全站使用csrf認證 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
如果我想讓某個請求不通過csrf認證可以這樣做
from django.views.decorators.csrf import csrf_exempt @csrf_exempt # 該函數(shù)無需認證 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list)))
情況二(全站不使用csrf認證,局部想使用csrf認證)
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', #'django.middleware.csrf.CsrfViewMiddleware', # 全站不使用csrf認證 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
如果我想讓某個請求使用csrf認證可以這樣做
from django.views.decorators.csrf import csrf_exempt,csrf_protect @csrf_protect # 該函數(shù)需認證 def users(request): user_list = ['alex','oldboy'] return HttpResponse(json.dumps((user_list)))
CBV小知識,csrf時需要使用
- @method_decorator(csrf_exempt)
- 在dispatch方法中(單獨方法無效)
方式一
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ì),基于反射來實現(xiàn)
- - 流程:路由,view,dispatch(反射)
- - 取消csrf認證(裝飾器要加到dispatch方法上且method_decorator裝飾)
擴展:
- - csrf
- - 基于中間件的process_view方法
- - 裝飾器給單獨函數(shù)進行設(shè)置(認證或無需認證)
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python如何統(tǒng)計字符串中字符的個數(shù)
這篇文章主要給大家介紹了關(guān)于python如何統(tǒng)計字符串中字符的個數(shù)的相關(guān)資料,如果在一個字符串中,需要統(tǒng)計某個字符或字符串出現(xiàn)的次數(shù),可以使用count方法,需要的朋友可以參考下2023-10-10python目標檢測YoloV4當中的Mosaic數(shù)據(jù)增強方法
這篇文章主要為大家介紹了python目標檢測YoloV4當中的Mosaic數(shù)據(jù)增強方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Django動態(tài)展示Pyecharts圖表數(shù)據(jù)的幾種方法
本文主要介紹了Django動態(tài)展示Pyecharts圖表數(shù)據(jù)的幾種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-08-08python實現(xiàn)下載指定網(wǎng)址所有圖片的方法
這篇文章主要介紹了python實現(xiàn)下載指定網(wǎng)址所有圖片的方法,涉及Python針對頁面的讀取、遍歷及文件操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08