1. 程式人生 > >Django自定義中介軟體

Django自定義中介軟體

django中介軟體是嵌入 django 的 request/response 處理過程的一套鉤子框架。它是一個輕量級的底層嵌入系統,可以對 django 的輸入輸出做整體的修改

Django中介軟體必須是一個類,不需要繼承任何類,並提供四個介面:

1、 process_request(self, request)該方法在請求到來的時候呼叫。 
2、 process_view(self ,request, fnc , arg ,kwarg)在本次將要執行的View函式被呼叫前呼叫本函式。 
3、 process_response(self,request,response)在執行完View函式準備將響應發到客戶端前被執行。 


4、 **process_exception(self,request, exception)**View函式在丟擲異常時該函式被呼叫,得到的exception引數是實際上丟擲的異常例項。通過此方法可以進行很好的錯誤控制,提供友好的使用者介面。

要啟用中介軟體,需要把它新增到Django 配置檔案settings.py中的MIDDLEWARE中。

例如:判斷請求的終端是pc還是iPhone:

1.我們在app下建立一個my_middleware.py的檔案:

from django.utils import deprecation


class CheckSourceMiddleware(deprecation.MiddlewareMixin):
    def process_request(self, request):
        from_source = request.META['HTTP_USER_AGENT']
        print('from_source', from_source)
        if 'iPhone' in from_source:
            request.session['from_source'] = 'iphone'
        else:
            request.session['from_source'] = 'pc'

2.在views.py檔案中加一下程式碼:

def index(request):
    from_source = request.session.get('from_source', 'unknow')
    res = 'from %s' % from_source
    return HttpResponse(res)

3.在settings.py檔案的MIDDLEWARE陣列中加入:

'app_name.my_middleware.CheckSourceMiddleware',

以上,我們訪問index檢視的時候,就會得到我們是以電腦開啟的還是以iphone手機開啟的