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

Django中間件基礎用法詳解

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

前言

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

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

文件夾的名字可自定義,本文使用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預處理函數: process_request(self, request)

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

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

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

Template模版渲染函數:process_template_response()

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

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python深入學習之上下文管理器

    Python深入學習之上下文管理器

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

    Python中函數的基本定義與調用及內置函數詳解

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

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

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

    python實現提取COCO,VOC數據集中特定的類

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

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

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

    Python3實現的反轉單鏈表算法示例

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

    python3中bytes數據類型的具體使用

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

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

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

    使用Python輕松實現一個簡單的圖床功能

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

    python Qt5實現窗體跟蹤鼠標移動

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

最新評論

丰城市| 阜南县| 黄大仙区| 崇阳县| 田阳县| 互助| 陇川县| 大化| 安顺市| 陇川县| 清新县| 星座| 新干县| 汝南县| 远安县| 滨州市| 拉萨市| 开江县| 定边县| 建始县| 阳春市| 麻江县| 定兴县| 十堰市| 佛坪县| 平潭县| 永州市| 桃源县| 哈巴河县| 噶尔县| 梁河县| 同仁县| 黄山市| 连城县| 邵阳县| 繁昌县| 宁强县| 庄河市| 宁武县| 清徐县| 类乌齐县|