一 中間件ajax
-中間件是什麼?請求和響應之間的一道屏障 -中間件做用:控制請求和響應 -django中內置幾個中間件 -自定義中間件 -from django.utils.deprecation import MiddlewareMixin 先導入 -定義一個類,隨意命名,繼承MiddlewareMixin class MyMiddleware1(MiddlewareMixin): def process_request(self, request): print('MyMiddleware---->1---->process_request') # 返回HttpRspons對象,直接返回,走本身的process_response # 返回None的時候,繼續往下走 # return HttpResponse('i am middle--1') return None def process_response(self, request, response): print('MyMiddleware--->1---->process_response') return response -使用:在setting中註冊,是有順序的, MIDDLEWARE = [ 'app01.mymiddelware.MyMiddleware1', ] -中間件執行順序: -process_request,從上往下執行 -若是retrun HttpResponse的對象,直接返回 -若是retrun None ,繼續往下走 -process_response,從下往上執行 -必需要retrun Httpresponse的對象 -中間件的方法:() -process_request -請求來的時候,會響應它 -process_response -響應回去的時候,會走它 -process_view(瞭解) - request, callback(視圖函數), callback_args(無名分組的參數), callback_kwargs(有名分組的參數)-def process_exception(self, request, exception)(瞭解) -def process_template_response(self, request, response):(瞭解)
二 csrf:跨站請求僞造django
#CSRF(Cross-site request forgery)跨站請求僞造 -攻擊者盜用了你的身份,以你的名義發送惡意請求,對服務器來講這個請求是徹底合法的 #如何防範: -驗證 HTTP Referer 字段,根據 HTTP 協議,在 HTTP 頭中有一個字段叫 Referer,它記錄了該 HTTP 請求的來源地址。若是 Referer 是其餘網站的話,則有多是黑客的 CSRF 攻擊,拒絕該請求。 -加一個隨機字符串校驗(加載請求的路徑裏,加載請求體中) -在請求頭中加字符串校驗 django中的應用: -中間件不註釋掉 -之後再發post請求,攜帶那個隨機字符串 -form表單形式: <form action="" method="post"> {% csrf_token %} <input type="text" name="name"> <input type="text" name="pwd"> <input type="submit" value="提交"> </form> -ajax提交 data: { 'name': $('[name="name"]').val(), 'pwd': $('[name="pwd"]').val(), //'csrfmiddlewaretoken': $('[name="csrfmiddlewaretoken"]').val() 'csrfmiddlewaretoken': '{{ csrf_token }}' },
csrf:局部禁用,局部使用 -用裝飾器:from django.views.decorators.csrf import csrf_exempt,csrf_protect -fbv--->直接加載fbv上就好了 -局部禁用,全局得使用 @csrf_exempt def csrf_disable(request): print(request.POST) return HttpResponse('ok') -局部使用,全局得禁用 @csrf_protect def csrf_disable(request): print(request.POST) return HttpResponse('ok') -cbv-->只能加在dispatch方法或者類上面
-局部禁用,全局得使用
-局部使用,全局得禁用
from django.views import View
from django.utils.decorators import method_decorator
@method_decorator(csrf_protect,name='dispatch')
class Csrf_disable(View):
# @method_decorator(csrf_protect) def dispatch(self, request, *args, **kwargs): ret=super().dispatch(request, *args, **kwargs) return ret def get(self,request): return HttpResponse('ok') def post(self,request): return HttpResponse('post---ok')