使用django 中介軟體在所有請求前執行功能

曲徑通幽處發表於2019-01-15

django中間是一個輕級,低耦合的外掛,用來改變全域性的輸入和輸出。

一 如何使用中介軟體

  • 定義中介軟體
  • 註冊中介軟體
# 這是一箇中介軟體程式碼片段的說明,在各個位置的程式碼將在何時執行
def simple_middleware(get_response):
    # One-time configuration and initialization.

    def middleware(request):
        # Code to be executed for each request before
        # the view (and later middleware) are called.

        response = get_response(request)

        # Code to be executed for each request/response after
        # the view is called.

        return response

    return middleware

get_response有可能是django實際的檢視函式,也有可能是下一個中介軟體,我們不必要具體知道get_response到底是什麼,只需要知道get_response是下一個需要處理的函式。

註冊中介軟體

# 需要在配置檔案中加入自定義中介軟體
MIDDLEWARE = [
    `django.middleware.security.SecurityMiddleware`,
    `django.contrib.sessions.middleware.SessionMiddleware`,
    `django.middleware.common.CommonMiddleware`,
    `django.middleware.csrf.CsrfViewMiddleware`,
    `django.contrib.auth.middleware.AuthenticationMiddleware`,
    `django.contrib.messages.middleware.MessageMiddleware`,
    `django.middleware.clickjacking.XFrameOptionsMiddleware`,
    `path.to.middleware.simple_middleware`,   
]

中介軟體的執行順序依據配置檔案中定義的順序依次執行。

二 使用中介軟體實現所有請求前進行認證

def auth_middleware(get_response):
    def middleware(request):
        if not user.is_authented:
              # 這個地方要特殊處理一下,不然遇到login介面也會一直重定向
              ...
              return HttpResponseRedirect(`/login`)
        response = get_response(request)
        return response
    return middleware

 

相關文章