Python-Django-Ajax進階3

1 中間件

-是什麼?

中間件顧名思義,是介於request與response處理之間的一道處理過程,相對比較輕量級,而且在全局上改變django的輸入與輸出。由於改變的是全局,因此須要謹慎實用,用很差會影響到性能
python

-怎麼用:

 


-自定義中間件:

1 寫一個類,繼承MiddlewareMixin,
2 在類中寫方法:
process_request
3 在settings中配置django

from django.utils.deprecation import MiddlewareMixin

from django.shortcuts import render, HttpResponse


class mymiddleware1(MiddlewareMixin):
    def process_request(self, request):
        # print(request.path)
        # print(type(request))
        # request.aa='lqz'
        print('我是middle1的process_request方法')
        # 一旦returnHttpResponse對象,直接返回
        # return HttpResponse('我返回了')

    def process_response(self, request, response):
        # request就是請求對象
        # response就是響應對象
        print('我是middle1的process_response方法')
        # response.set_cookie('name','lqz')
        return response
    def process_view(self, request, callback, callback_args, callback_kwargs):
        # callback 是要執行的視圖函數地址
        # callback_args是要執行的視圖函數的位置參數(元組)
        # callback_kwargs是要執行的視圖函數的關鍵字參數(字典)
        # print(type(callback))
        # print(callback_args)
        # print(callback_kwargs)
        # response=callback(request,*callback_args,**callback_kwargs)
        print('我是middle1的process_view方法')
        # 若是返回response,後面的process_view就不執行了,直接執行中間件的process_response方法
        # return response
    def process_exception(self, request, exception):
        #exception 異常對象
        print('我是m1的process_exception方法')

class mymiddleware2(MiddlewareMixin):
    def process_request(self, request):
        # print(request.path)
        # print(type(request))
        print('我是middle2的process_request方法')

    def process_response(self, request, response):
        print('我是middle2的process_response方法')
        return response

    def process_view(self, request, callback, callback_args, callback_kwargs):
        print('我是middle2的process_view方法')
    # 只有視圖函數拋異常,才執行
    def process_exception(self, request, exception):
        print('我是m2的process_exception方法')
        print(str(exception))
        return HttpResponse('您的操做有誤')

    def process_template_response(self, request, response):
        print('我是m2的process_template_response')
        return response

  

-5個方法(process_request,process_response)

-若是process_request方法返回HttpResponse的對象,請求直接返回,按中間件方法執行順序往回走
cookie

2 csrf

xss攻擊/csrf或xsrf跨站請求僞造
使用:中間件不註釋,form表單中寫{% csrf_token %}xss

相關文章
相關標籤/搜索