1. 程式人生 > >django的中介軟體---介紹與重寫

django的中介軟體---介紹與重寫

django 中的中介軟體(middleware),在django中,中介軟體其實就是一個類,在請求到來和結束後,django會根據自己的規則在合適的時機執行中介軟體中相應的方法。

在django專案的settings模組中,有一個 MIDDLEWARE_CLASSES 變數,其中每一個元素就是一箇中間件, 如下:


MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

在專案同名資料夾裡面建立新的叫middleware.py的檔案,在裡面重寫中間類:

class NewMid():
    def __init__(self):
        print('這是hi我們的中介軟體的init')


    def process_request(self, request):
        '''處理請求之前'''
        print('process_request')


    def process_view(self,request,view_func,*args,**kwargs):
        '''處理檢視之前'''

        print('process_view')

    # def process_response(self, request, response):
    #     '''處理響應完成之後'''
    #     print('process_response')

    def process_exception(self,request,exception):
        '''異常處理'''
        # raise Exception('我是異常') 寫在視圖裡面,這裡做的示範
        print('process_exception')

然後在專案資料夾的setting裡面MIDDLEWARE_CLASSES裡,註冊並關聯這個這個中間類:

    'watercar.middleware.NewMid',     #與minddleware.NewMid 產生關聯

這樣就完成了中介軟體的重寫,如果你想在’’‘處理請求之前’’’、’’‘處理檢視之前’’’、’’‘處理響應完成之後’’’ 等,這些時間裡做什麼就直接可以做了。