最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Django中間件基礎(chǔ)用法詳解

 更新時間:2019年07月18日 11:26:59   作者:LeslieLiang  
這篇文章主要介紹了Django中間件基礎(chǔ)用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

前言

django的中間件可以在視圖函數(shù)執(zhí)行前執(zhí)行,比如登陸驗證、日志記錄等,下面簡單說明一下中間件的基礎(chǔ)用法,主要為筆者學(xué)習(xí)時的筆記

1. 在django項目文件夾下創(chuàng)建一個用于存放中間件函數(shù)的文件夾

文件夾的名字可自定義,本文使用utils作為文件夾名

2. 在utils文件夾中創(chuàng)建中間件py文件

如用于登陸驗證的中間件loginCheck.py

from django.http import HttpResponseRedirect
from django.utils.deprecation import MiddlewareMixin

class UserLoginCheck(MiddlewareMixin):
  '''
  登錄驗證中間件
  '''
  def process_request(self, request):
    # 用戶request請求前
    path = ['/login/', '/logout/'] # 不需要進行登錄檢測的url
    if request.path in path:
      return

    userinfoSession = request.session.get('userinfo')
    if not userinfoSession:
      return HttpResponseRedirect('/login/')
    return

3. 配置使用中間件

在setting.py文件中配置中間件

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',
  'utils.loginCheck.UserLoginCheck', # 此處為自定義的中間件
]

擴展

中間件可定義的五種方法

Request預(yù)處理函數(shù): process_request(self, request)

  • 這個方法的調(diào)用時機在Django接收到request之后,但仍未解析URL以確定應(yīng)當(dāng)運行的視圖函數(shù)。Django向它傳入相應(yīng)的Request對象,以便在方法中修改。
  • 如果返回None,Django將繼續(xù)處理這個request,執(zhí)行后續(xù)的中間件, 然后調(diào)用相應(yīng)的 view。
  • 如果返回HttpResponse對象,Django將不再執(zhí)行任何除了process_response以外其它的中間件以及相應(yīng)的view,Django將立即返回該HttpResponse。

View預(yù)處理函數(shù): process_view(self, request, callback, callback_args,callback_kwargs)

  • 這個方法的調(diào)用時機在 Django 執(zhí)行完 request 預(yù)處理函數(shù)并確定待執(zhí)行的 view (即callback參數(shù))之后,但在 view 函數(shù)實際執(zhí)行之前。
  • request:HttpRequest 對象。
  • callback:Django將調(diào)用的處理request的python函數(shù). 這是實際的函數(shù)對象本身, 而不是字符串表述的函數(shù)名。
  • args:將傳入view的位置參數(shù)列表,但不包括request參數(shù)(它通常是傳入view的第一個參數(shù))。
  • kwargs:將傳入view的關(guān)鍵字參數(shù)字典。
  • process_view() 應(yīng)當(dāng)返回None或 HttpResponse 對象。如果返回 None, Django將繼續(xù)處理這個request ,執(zhí)行后續(xù)的中間件, 然后調(diào)用相應(yīng)的view。
  • 如果返回 HttpResponse 對象,Django 將不再執(zhí)行任何其它的中間件(不論種類)以及相應(yīng)的view,Django將立即返回。

Template模版渲染函數(shù):process_template_response()

默認不執(zhí)行,只有在視圖函數(shù)的返回結(jié)果對象中有render方法才會執(zhí)行,并把對象的render方法的返回值返回給用戶(注意不返回視圖函數(shù)的return的結(jié)果了,而是返回視圖函數(shù) return值(對象)中rende方法的結(jié)果)

Exception后處理函數(shù):process_exception(self, request, exception)

  • 這個方法只有在 request 處理過程中出了問題并且view 函數(shù)拋出了一個未捕獲的異常時才會被調(diào)用。這個鉤子可以用來發(fā)送錯誤通知,將現(xiàn)場相關(guān)信息輸出到日志文件,或者甚至嘗試從錯誤中自動恢復(fù)。
  • 這個函數(shù)的參數(shù)除了一貫的request對象之外,還包括view函數(shù)拋出的實際的異常對象exception 。
  • process_exception() 應(yīng)當(dāng)返回None或HttpResponse對象。
  • 如果返回None,Django將用框架內(nèi)置的異常處理機制繼續(xù)處理相應(yīng)request。
  • 如果返回HttpResponse對象,Django將使用該response對象,而短路框架內(nèi)置的異常處理機制。

Response后處理函數(shù):process_response(self, request, response)

  • 這個方法的調(diào)用時機在 Django 執(zhí)行 view 函數(shù)并生成 response 之后。
  • 該處理器能修改response 的內(nèi)容;一個常見的用途是內(nèi)容壓縮,如gzip所請求的HTML頁面。
  • 這個方法的參數(shù)相當(dāng)直觀:request是request對象,而response則是從view中返回的response對象。
  • process_response() 必須返回 HttpResponse 對象. 這個 response 對象可以是傳入函數(shù)的那一個原始對象(通常已被修改),也可以是全新生成的。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python深入學(xué)習(xí)之上下文管理器

    Python深入學(xué)習(xí)之上下文管理器

    這篇文章主要介紹了Python深入學(xué)習(xí)之上下文管理器,上下文管理器是在Python2.5加入的功能,它能夠讓你的代碼可讀性更強并且錯誤更少,和C#中的using語句類似,需要的朋友可以參考下
    2014-08-08
  • Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于Python中函數(shù)的基本定義與調(diào)用及內(nèi)置函數(shù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Opencv判斷顏色相似的圖片示例代碼

    Opencv判斷顏色相似的圖片示例代碼

    這篇文章主要介紹了Opencv判斷顏色相似的圖片示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • python實現(xiàn)提取COCO,VOC數(shù)據(jù)集中特定的類

    python實現(xiàn)提取COCO,VOC數(shù)據(jù)集中特定的類

    這篇文章主要介紹了python實現(xiàn)提取COCO,VOC數(shù)據(jù)集中特定的類,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python使用random模塊生成隨機數(shù)操作實例詳解

    Python使用random模塊生成隨機數(shù)操作實例詳解

    這篇文章主要介紹了Python使用random模塊生成隨機數(shù)操作,結(jié)合具體實例形式詳細分析了random模塊生成隨機數(shù)的各種常用技巧與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-09-09
  • Python3實現(xiàn)的反轉(zhuǎn)單鏈表算法示例

    Python3實現(xiàn)的反轉(zhuǎn)單鏈表算法示例

    這篇文章主要介紹了Python3實現(xiàn)的反轉(zhuǎn)單鏈表算法,結(jié)合實例形式總結(jié)分析了Python基于迭代算法與遞歸算法實現(xiàn)的翻轉(zhuǎn)單鏈表相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • python3中bytes數(shù)據(jù)類型的具體使用

    python3中bytes數(shù)據(jù)類型的具體使用

    bytes類型是python3引入的,本文就來介紹一下python3中bytes數(shù)據(jù)類型的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • 如何解決python多種版本沖突問題

    如何解決python多種版本沖突問題

    這篇文章主要介紹了如何解決python多種版本沖突問題,幫助大家更好的進行python開發(fā),感興趣的朋友可以了解下
    2020-10-10
  • 使用Python輕松實現(xiàn)一個簡單的圖床功能

    使用Python輕松實現(xiàn)一個簡單的圖床功能

    在網(wǎng)上分享圖片或?qū)D片嵌入到網(wǎng)頁中時,通常需要一個圖床來存儲和管理這些圖片,所以本文就來為大家介紹一下如何使用Python輕松實現(xiàn)一個簡單的圖床功能吧
    2024-01-01
  • python Qt5實現(xiàn)窗體跟蹤鼠標移動

    python Qt5實現(xiàn)窗體跟蹤鼠標移動

    今天小編就為大家分享一篇python Qt5實現(xiàn)窗體跟蹤鼠標移動,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12

最新評論

水富县| 大埔县| 原阳县| 武胜县| 射洪县| 巫山县| 沿河| 金山区| 东辽县| 黄骅市| 广河县| 安康市| 南通市| 汾阳市| 格尔木市| 辉南县| 凯里市| 呼和浩特市| 溆浦县| 米泉市| 镇巴县| 垣曲县| 宜丰县| 大石桥市| 庆阳市| 勃利县| 吉安县| 师宗县| 灵台县| 南投市| 苍南县| 抚远县| 阳原县| 衢州市| 深泽县| 东宁县| 顺平县| 什邡市| 武夷山市| 修水县| 新巴尔虎左旗|