亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Django框架中間件定義與使用方法案例分析

 更新時(shí)間:2019年11月28日 10:53:41   作者:ITxiaoke  
這篇文章主要介紹了Django框架中間件定義與使用方法,結(jié)合具體案例形式分析了Django框架中間件相關(guān)定義、原理、使用方法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Django框架中間件定義與使用方法。分享給大家供大家參考,具體如下:

1. 定義

Django中的中間件是一個(gè)輕量級(jí)、底層的插件系統(tǒng),可以介入Django的請(qǐng)求和響應(yīng)處理過(guò)程,修改Django的輸入或輸出。中間件的設(shè)計(jì)為開(kāi)發(fā)者提供了一種無(wú)侵入式的開(kāi)發(fā)方式,增強(qiáng)了Django框架的健壯性,其它的MVC框架也有這個(gè)功能,名稱(chēng)為IoC。

2. 各個(gè)方法

Django在中間件中預(yù)置了五個(gè)方法,這五個(gè)方法的區(qū)別在于不同的階段執(zhí)行,對(duì)輸入或輸出進(jìn)行干預(yù),方法如下:

1)初始化:無(wú)需任何參數(shù), 服務(wù)器接收第一個(gè)請(qǐng)求時(shí)會(huì)被調(diào)用一次,而且只調(diào)用一次,用于確定是否啟用當(dāng)前中間件。

def init(): 
pass

2)在進(jìn)行url匹配之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。

def process_request(request): 
pass

3)在url匹配之后,視圖函數(shù)調(diào)用之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回None或HttpResponse對(duì)象。

def process_view(request, view_func, view_args, view_kwargs): 
pass

4) 視圖函數(shù)之后會(huì)被調(diào)用:所有響應(yīng)返回瀏覽器之前被調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回HttpResponse對(duì)象。

def process_response(request, response): 
pass

5)異常處理:當(dāng)視圖函數(shù)拋出異常時(shí)調(diào)用,在每個(gè)請(qǐng)求上調(diào)用,返回一個(gè)HttpResponse對(duì)象。

def process_exception(request,exception): 
pass

3. 案例加以說(shuō)明

1)在booktest/目錄下創(chuàng)建middleware.py文件,代碼如下:

from django.http import HttpResponse
from django.conf import settings
class MyMiddleWare(object):
  def __init__(self):
    print("init")
  def process_request(self,request):
    print("prcess_request")
  def process_view(self,request,view_func,*view_args,**view_kwargs):
    print("process_view")
  def process_response(self,request,response):
    print("process_response")
    return response
  def process_exception(self,request,exception):
    print("exception")

2)在test05/settings.py文件中,向MIDDLEWARE_CLASSES項(xiàng)中注冊(cè)。

MIDDLEWARE_CLASSES = (
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
  'django.middleware.security.SecurityMiddleware',
  'booktest.middleware.MyMiddleWare',
)

3)修改booktest/views.py中視圖index。

# 首頁(yè)的視圖函數(shù)
def index(request):
  print("index")
  return render(request,'booktest/index.html')

4)運(yùn)行服務(wù)器,命令行中效果如下圖:

5)刷新頁(yè)面,命令行中效果如下圖:

6)異常中間件效果:

+如果多個(gè)中間件中注冊(cè)了相同的方法,則先注冊(cè)的后執(zhí)行。

修改視圖函數(shù)如下:

# 首頁(yè)的視圖函數(shù)
def index(request):
  print("index")
  raise Exception("value error")
  return render(request,'booktest/index.html')

效果圖如下:

4. Github代碼地址:

https://github.com/ITXIAOKE/PythonMiddlewareDemo

希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 一個(gè)超級(jí)簡(jiǎn)單的python web程序

    一個(gè)超級(jí)簡(jiǎn)單的python web程序

    這篇文章主要介紹了一個(gè)超級(jí)簡(jiǎn)單的python web程序,需要的朋友可以參考下
    2014-09-09
  • python 寫(xiě)的一個(gè)爬蟲(chóng)程序源碼

    python 寫(xiě)的一個(gè)爬蟲(chóng)程序源碼

    這篇文章主要介紹了python 寫(xiě)的一個(gè)爬蟲(chóng)程序源碼,需要的朋友可以參考下
    2016-02-02
  • Python中的None與 NULL(即空字符)的區(qū)別詳解

    Python中的None與 NULL(即空字符)的區(qū)別詳解

    這篇文章主要介紹了Python中的None與 NULL(即空字符)的區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Python 多線(xiàn)程超詳細(xì)到位總結(jié)

    Python 多線(xiàn)程超詳細(xì)到位總結(jié)

    線(xiàn)程在程序中是獨(dú)立的、并發(fā)的執(zhí)行流。與分隔的進(jìn)程相比,進(jìn)程中線(xiàn)程之間的隔離程度要小,它們共享內(nèi)存、文件句柄和其他進(jìn)程應(yīng)有的狀態(tài)。線(xiàn)程的劃分尺度小于進(jìn)程,使多線(xiàn)程程序的并發(fā)性高。進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立內(nèi)存單元,而多個(gè)線(xiàn)程共享內(nèi)存,從而提升程序運(yùn)行效率
    2021-11-11
  • spark dataframe 將一列展開(kāi),把該列所有值都變成新列的方法

    spark dataframe 將一列展開(kāi),把該列所有值都變成新列的方法

    今天小編就為大家分享一篇spark dataframe 將一列展開(kāi),把該列所有值都變成新列的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包

    Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包

    今天小編就為大家分享一篇關(guān)于Python選擇網(wǎng)卡發(fā)包及接收數(shù)據(jù)包,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-04-04
  • Python?中的嵌套字典推導(dǎo)的使用及優(yōu)勢(shì)

    Python?中的嵌套字典推導(dǎo)的使用及優(yōu)勢(shì)

    Python 字典推導(dǎo)是一個(gè)強(qiáng)大的工具,允許您從現(xiàn)有的字典創(chuàng)建新的字典,這篇文章主要介紹了Python中的嵌套字典推導(dǎo),將探索 Python 嵌套字典推導(dǎo)、它的使用以及在 Python 中使用它的優(yōu)勢(shì),需要的朋友可以參考下
    2023-05-05
  • 定制FileField中的上傳文件名稱(chēng)實(shí)例

    定制FileField中的上傳文件名稱(chēng)實(shí)例

    下面小編就為大家?guī)?lái)一篇定制FileField中的上傳文件名稱(chēng)實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • Python實(shí)現(xiàn)MySql數(shù)據(jù)庫(kù)交互的示例

    Python實(shí)現(xiàn)MySql數(shù)據(jù)庫(kù)交互的示例

    本文主要介紹了Python實(shí)現(xiàn)MySql數(shù)據(jù)庫(kù)交互的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • python進(jìn)程和線(xiàn)程用法知識(shí)點(diǎn)總結(jié)

    python進(jìn)程和線(xiàn)程用法知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理了關(guān)于python進(jìn)程和線(xiàn)程用法以及相關(guān)實(shí)例內(nèi)容,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05

最新評(píng)論