日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

django redirect传递参数_Django中间件

發布時間:2023/12/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 django redirect传递参数_Django中间件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是中間件

中間件,是介于request與response處理之間的一道處理過程,相對比較輕量級,并且在全局上改變django的輸入與輸出。因為改變的是全局,所以需要謹慎實用,用不好會影響到性能。

django中間價官網定義:

Middleware is a framework of hooks into Django’s request/response processing.
It’s a light, low-level “plugin” system for globally altering Django’s input or output.

二、中間件有什么作用

如果你想修改請求。

例如被傳送到view中的HttpRequest對象。 或者你想修改view返回的HttpResponse對象,這些都可以通過中間件來實現。

可能你還想在view執行之前做一些操作,這種情況就可以用 middleware來實現。

Django默認的中間件:(在django項目的settings模塊中,有一個 MIDDLEWARE變量,其中每一個元素就是一個中間件,如下圖)

請求進來是自上而下,通過反射找到類,用for循環來執行。

可以自定義中間件,但是也要寫在MIDDLEWARE中,可以在app01下創建一個mymid.py文件來寫我們自定義的中間件

每一個中間件都有具體的功能.

三、自定義中間件

中間件可以定義五個方法,分別是:(主要的是process_request和process_response)

1、process_request(self,request)2、process_view(self, request, callback, callback_args, callback_kwargs)3、process_template_response(self,request,response)4、process_exception(self, request, exception)5、process_response(self, request, response)

以上方法的返回值可以是None或一個HttpResponse對象,如果是None,則繼續按照django定義的規則向后繼續執行,如果是HttpResponse對象,則直接將該對象返回給用戶。

1、process_request和process_response

當用戶發起請求的時候會依次經過所有的的中間件,這個時候的請求時process_request,最后到達views的函數中,views函數處理后,在依次穿過中間件,這個時候是process_response,最后返回給請求者。

上述截圖中的中間件都是django中的,我們也可以自己定義一個中間件,我們可以自己寫一個類,但是必須繼承MiddlewareMixin。

2、process_view

process_view(self, request, view_func, view_args, view_kwargs)

該方法有四個參數:

request是HttpRequest對象。

view_func是Django即將使用的視圖函數。 (它是實際的函數對象,而不是函數的名稱作為字符串。)

view_args是將傳遞給視圖的位置參數的列表(無名分組分過來的值).

view_kwargs是將傳遞給視圖的關鍵字參數的字典(有名分組分過來的值)。 view_args和view_kwargs都不包含第一個視圖參數(request)。

Django會在調用視圖函數之前調用process_view方法。

它應該返回None或一個HttpResponse對象。 如果返回None,Django將繼續處理這個請求,執行任何其他中間件的process_view方法,然后在執行相應的視圖。 如果它返回一個HttpResponse對象,Django不會調用適當的視圖函數。 它將執行中間件的process_response方法并將應用到該HttpResponse并返回結果。

3、process_exception

process_exception(self, request, exception)

該方法兩個參數:

一個HttpRequest對象

一個exception是視圖函數異常產生的Exception對象。

這個方法只有在視圖函數中出現異常了才執行,它返回的值可以是一個None也可以是一個HttpResponse對象。如果是HttpResponse對象,Django將調用模板和中間件中的process_response方法,并返回給瀏覽器,否則將默認處理異常。如果返回一個None,則交給下一個中間件的process_exception方法來處理異常。它的執行順序也是按照中間件注冊順序的倒序執行。

4、process_template_response(self,request,response)

該方法對視圖函數返回值有要求,必須是一個含有render方法類的對象,才會執行此方法。

如何自定義中間件?

自定義中間件的模板

def

根據代碼:需要定義一個中間件的工廠函數 simple_middleware,然后返回一個可以被調用的中間件 middleware

中間件工廠函數 simple_middleware 需要接收一個可以調用的 get_response 對象

返回的中間件也是一個可以被調用的對象,并且像視圖一樣需要接收一個request對象參數,返回一個response對象。

例如:在一個模塊中新建一個middleware.py文件

在文件中寫入以下代碼:

定義好中間件后,需要在settings.py 文件中添加注冊中間件

定義一個視圖進行測試

四、中間件應用場景

1、做IP訪問頻率限制

某些IP訪問服務器的頻率過高,進行攔截,比如限制每分鐘不能超過20次。

2、URL訪問過濾

如果用戶訪問的是login視圖(放過)

如果訪問其他視圖,需要檢測是不是有session認證,已經有了放行,沒有返回login,這樣就省得在多個視圖函數上寫裝飾器了!

3、緩存(還記得CDN嗎?)

客戶端請求來了,中間件去緩存看看有沒有數據,有直接返回給用戶,沒有再去邏輯層 執行視圖函數

總結

以上是生活随笔為你收集整理的django redirect传递参数_Django中间件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。