Django-中間件

一 中間件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')
相關文章
相關標籤/搜索