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

Django 中介軟體

Middleware也就是所謂的中介軟體 Django的中介軟體的這個中間指的是 伺服器接受到Request ---- View處理,以及View處理完 ---- 傳送Response到客戶端 這兩個中間。

1.中介軟體只是實現了某些特定方法的普通物件

所以定義一箇中間件很容易,你只需要定義一個普通的python類,然後實現如下四個方法中的某一個或者某幾個各個函式執行的時機

process_request   # 接受request之後確定所執行的view之前  

process_view        # 確定了所要執行的view之後 view真正執行之前

process_response   # view 執行之後 

process_exception(self, request, exception)  # view丟擲異常

2.安裝中介軟體

 通過django-admin生成的專案的setting.py的配置檔案中預設有如下設定,

 如果你需要新增自己的中介軟體,你需要在這個地方進行指定。

  1. MIDDLEWARE_CLASSES (  
  2. 'django.middleware.common.CommonMiddleware',  
  3. 'django.contrib.sessions.middleware.SessionMiddleware',  
  4. 'django.middleware.csrf.CsrfViewMiddleware',  
  5. 'django.contrib.auth.middleware.AuthenticationMiddleware',  

這裡指定的順序和實際執行時執行的順序相關,

在request階段:process_request,process_view 按照其所在類在配置中的先後順序進行,

在response階段:process_response,process_exception 則按照相反的順序進行。

還有一點就是在整個流程中,每一個process_response都會執行到,

而其餘三種,都可能會因為其他的直接retuen response或者不發生異常而不被執行到。

---------------------------------------------------------------------------------------------------------------------------------

我們從瀏覽器發出一個請求 Request,得到一個響應後的內容 HttpResponse ,這個請求傳遞到 Django的過程如下:

也就是說,每一個請求都是先通過中介軟體中的 process_request 函式,這個函式返回 None 或者 HttpResponse 物件,如果返回前者,繼續處理其它中介軟體,如果返回一個 HttpResponse,就處理中止,返回到網頁上。

中介軟體不用繼承自任何類(可以繼承 object ),下面一箇中間件大概的樣子:

1 2 3 4 5 6 class CommonMiddleware(object): def process_request(self, request): return None def process_response(self, request, response): return response

還有 process_view, process_exception 和 process_template_response 函式。

一,比如我們要做一個 攔截器,發生有惡意訪問網站的人,就攔截他!

假如我們通過一種技術,比如統計一分鐘訪問頁面數,太多就把他的 IP 加入到黑名單 BLOCKED_IPS(這部分沒有提供程式碼,主要講中介軟體部分)

1 2 3 4 5 6 #專案 zqxt 檔名 zqxt/middleware.py class BlockedIpMiddleware(object): def process_request(self, request): if request.META['REMOTE_ADDR'in getattr(settings, "BLOCKED_IPS", []): return http.HttpResponseForbidden('<h1>Forbidden</h1>')

這裡的程式碼的功能就是 獲取當前訪問者的 IP (request.META['REMOTE_ADDR']),如果這個 IP 在黑名單中就攔截,如果不在就返回 None (函式中沒有返回值其實就是預設為 None),把這個中介軟體的 Python 路徑寫到settings.py中

1 2 3 4 MIDDLEWARE_CLASSES = ( 'zqxt.middleware.BlockedIpMiddleware', ...其它的中介軟體 )

Django 會從 MIDDLEWARE_CLASSES 中按照從上到下的順序一個個執行中介軟體中的 process_request 函式,而其中 process_response 函式則是最前面的最後執行。

二,再比如,我們在網站放到伺服器上正式執行後,DEBUG改為了 False,這樣更安全,但是有時候發生錯誤不能顯示錯誤詳情頁面,有沒有辦法處理好這兩個事情呢?

  1. 普通訪問者看到的是友好的報錯資訊

  2. 管理員看到的是錯誤詳情,以便於修復 BUG

當然可以有,利用中介軟體就可以做到!程式碼如下:

1 2 3 4 5 6 7 8

相關推薦

Django 中介軟體 在其他語言中,有人叫這個管道

https://code.ziqiangxuetang.com/django/django-middleware.html 我們從瀏覽器發出一個請求 Request,得到一個響應後的內容 HttpResponse ,這個請求傳遞到 Django的過程如下: 也就是說,每一個請求都是先通過中介軟體中

Django 中介軟體 Django 中介軟體

Django 中介軟體    前戲 我們在前面的課程中已經學會了給檢視函式加裝飾器來判斷是使用者是否登入,把沒有登入的使用者請求跳轉到登入頁面。我們通過給幾個特定檢視函式加裝飾器實現了這個需求。

Django+中介軟體+登入驗證

  Django的request請求需要首先經過中介軟體處理,再通過URL查詢到對應的views函式進行處理。在settings的MIDDLEWARE_CLASSES中 新增設定中介軟體進行啟用,大致原理如下圖所示:          在使用Django框架進行開發的過程中,遇到一個

day68 Django--中介軟體

一,中介軟體介紹   1.什麼是中介軟體?     中介軟體是一個用來處理Django的請求和響應的框架級別的鉤子(函式)。它是一個輕量、低級別的外掛系統,用於在全域性範圍內改變Django的輸入和輸出。每個中介軟體元件都負責做一些特定的功能。     但是由於其影響的時全域性,所以需要謹慎使用,使用不

Django中介軟體 Django 中介軟體

Django 中介軟體 - 生如夏花、 - 部落格園     生如夏花、   部落格園 首頁 新隨筆

Django 中介軟體實現使用者認證與IP頻率限制

1.URL訪問過濾 通過裝飾器進行使用者認證非常方便,但是在新增部分需要認證的功能時,就需要再次新增裝飾器,如果通過中介軟體來實現,就不需要再進行新增的操作. import re LOGIN_URL = '/login/' class MyLogin(MiddlewareMixin): def p

小白學Django----------中介軟體

中介軟體 定義:是介於request與response處理之間的一道處理過程,相對比較輕量級,並且在全域性上改變django的輸入與輸出。因為改變的是全域性,所以需要謹慎實用,用不好會影響到效能。 1.中介軟體有什麼用 如果你想修改請求,例如被傳送到view中的HttpReque

Django中介軟體的處理流程

1、中介軟體介紹   wsgi之後 urls.py之前 在全域性 操作Django請求和響應的模組! 2、中介軟體的方法 2.1、process_request   執行順序:       按照註冊的順序(在settings.py裡面設定中 從上到下的順序)  何時執行:

利用django中介軟體django.middleware.csrf.CsrfViewMiddleware防止csrf攻擊

一、在django後臺處理 1、將django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django專案中會自帶的。 MIDDLEWARE_CLASSES = [ 'django.middleware.se

利用django中介軟體CsrfViewMiddleware防止csrf攻擊

一、在django後臺處理 1、將django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django專案中會自帶的。 MIDDLEWARE_CLASSES = [ 'django.middleware.se

Django中介軟體實現攔截器(轉載)

1.前言 JavaWeb Struts2的攔截器我們都能很熟悉,在請求交給Action處理之前,先在攔截器中處理,處理完之後再交給Action。  在Django中如何實現相同的效果? 2.Django中介軟體 這個是我的專案的目錄結構。    首先,先在app目錄

Django 中介軟體 Middleware

文章目錄 一、中介軟體 二、啟用中介軟體 三、中介軟體請求和響應 四、中介軟體處理流程說明(如下述的middleware) 五、中介軟體處理順序(如下述的middleware)

Django中介軟體

在有些場合,需要對Django處理的每個request都執行某段程式碼。這類程式碼可能是在view處理之前修改傳入的request,或者記錄日誌資訊以便於除錯,等等。 這類功能可以用Django的中介

Python Flask,請求鉤子(hook),(類似Django中介軟體)

  請求鉤子是通過裝飾器的形式實現,Flask支援如下四種請求鉤子: before_first_request:在處理第一個請求前執行。 before_request:在每次請求前執行(檢視函式執行前)。 after_request:如果沒有未處理的異常丟擲,在每次請求後執

Django 中介軟體

Middleware也就是所謂的中介軟體 Django的中介軟體的這個中間指的是 伺服器接受到Request ---- View處理,以及View處理完 ---- 傳送Response到客戶端 這兩個中間。 1.中介軟體只是實現了某些特定方法的普通物件

Django中介軟體介紹和使用

MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware' , 'django.contrib.sessions.middleware.SessionMiddleware' , 'django.mi

Django學習筆記9——Django 中介軟體

中介軟體 中介軟體介紹 什麼是中介軟體 官方的說法:中介軟體是一個用來處理Django的請求和響應的框架級別的鉤子。它是一個輕量、低級別的外掛系統,用於在全域性範圍內改變Django的輸入和輸出。每個中介軟體元件都負責做一些特定的功能。

django中介軟體CsrfViewMiddleware原始碼分析,探究csrf實現

Django Documentation csrf保護基於以下: 1. 一個CSRF cookie 基於一個隨機生成的值,其他網站無法得到。此cookie由CsrfViewMiddleware產生。它與每個呼叫django.middleware.csrf.g

Django中介軟體解析

中介軟體:中介軟體是Django框架給我們預留的函式介面,讓我們可以干預請求和應答的過程。 中介軟體應用場景: 1 IP限制 2 url訪問過濾 3 快取(請求過來後,中介軟體看有沒有快取資料,有的話直接返回給使用者,沒有的話再執行檢視函式) 中介軟體預留函式 1

python Django中介軟體的使用,原理 和實際應用

建立中介軟體 MIDDLEWARE = [ # 自定義 在 對應app內建立一個 my_middleware.py 然後路徑填寫進來即可 ] 常用兩中介軟體process_request & process_response from