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

詳解Python的Django框架中的中間件

 更新時(shí)間:2015年07月24日 11:29:56   投稿:goldensun  
這篇文章主要介紹了詳解Python的Django框架中的中間件,包括中間件的安裝等內(nèi)容,需要的朋友可以參考下

什么是中間件

我們從一個(gè)簡單的例子開始。

高流量的站點(diǎn)通常需要將Django部署在負(fù)載平衡proxy之后。 這種方式將帶來一些復(fù)雜性,其一就是每個(gè)request中的遠(yuǎn)程IP地址(request.META["REMOTE_IP"])將指向該負(fù)載平衡proxy,而不是發(fā)起這個(gè)request的實(shí)際IP。 負(fù)載平衡proxy處理這個(gè)問題的方法在特殊的 X-Forwarded-For 中設(shè)置實(shí)際發(fā)起請(qǐng)求的IP。

因此,需要一個(gè)小小的中間件來確保運(yùn)行在proxy之后的站點(diǎn)也能夠在 request.META["REMOTE_ADDR"] 中得到正確的IP地址:

class SetRemoteAddrFromForwardedFor(object):
  def process_request(self, request):
    try:
      real_ip = request.META['HTTP_X_FORWARDED_FOR']
    except KeyError:
      pass
    else:
      # HTTP_X_FORWARDED_FOR can be a comma-separated list of IPs.
      # Take just the first one.
      real_ip = real_ip.split(",")[0]
      request.META['REMOTE_ADDR'] = real_ip

(Note: Although the HTTP header is called X-Forwarded-For , Django makes it available as request.META['HTTP_X_FORWARDED_FOR'] . With the exception of content-length and content-type , any HTTP headers in the request are converted to request.META keys by converting all characters to uppercase, replacing any hyphens with underscores and adding an HTTP_ prefix to the name.)

一旦安裝了該中間件(參見下一節(jié)),每個(gè)request中的 X-Forwarded-For 值都會(huì)被自動(dòng)插入到 request.META['REMOTE_ADDR'] 中。這樣,Django應(yīng)用就不需要關(guān)心自己是否位于負(fù)載平衡proxy之后;簡單讀取 request.META['REMOTE_ADDR'] 的方式在是否有proxy的情形下都將正常工作。

實(shí)際上,為針對(duì)這個(gè)非常常見的情形,Django已將該中間件內(nèi)置。 它位于 django.middleware.http 中, 下一節(jié)將給出這個(gè)中間件相關(guān)的更多細(xì)節(jié)。
安裝中間件

要啟用一個(gè)中間件,只需將其添加到配置模塊的 MIDDLEWARE_CLASSES 元組中。 在 MIDDLEWARE_CLASSES 中,中間件組件用字符串表示: 指向中間件類名的完整Python路徑。 例如,下面是 django-admin.py startproject 創(chuàng)建的缺省 MIDDLEWARE_CLASSES :

MIDDLEWARE_CLASSES = (
  'django.middleware.common.CommonMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
)

Django項(xiàng)目的安裝并不強(qiáng)制要求任何中間件,如果你愿意, MIDDLEWARE_CLASSES 可以為空。

這里中間件出現(xiàn)的順序非常重要。 在request和view的處理階段,Django按照 MIDDLEWARE_CLASSES 中出現(xiàn)的順序來應(yīng)用中間件,而在response和異常處理階段,Django則按逆序來調(diào)用它們。 也就是說,Django將 MIDDLEWARE_CLASSES 視為view函數(shù)外層的順序包裝子: 在request階段按順序從上到下穿過,而在response則反過來。

相關(guān)文章

  • Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程

    Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程

    這篇文章主要介紹了Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python多進(jìn)程方式抓取基金網(wǎng)站內(nèi)容的方法分析

    Python多進(jìn)程方式抓取基金網(wǎng)站內(nèi)容的方法分析

    這篇文章主要介紹了Python多進(jìn)程方式抓取基金網(wǎng)站內(nèi)容的方法,結(jié)合實(shí)例形式分析了Python多進(jìn)程抓取網(wǎng)站內(nèi)容相關(guān)實(shí)現(xiàn)技巧與操作注意事項(xiàng),需要的朋友可以參考下
    2019-06-06
  • python爬蟲使用scrapy注意事項(xiàng)

    python爬蟲使用scrapy注意事項(xiàng)

    在本篇文章里小編給大家整理的是一篇關(guān)于python爬蟲使用scrapy注意事項(xiàng)的相關(guān)文章,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。
    2020-11-11
  • python挖礦算力測試程序詳解

    python挖礦算力測試程序詳解

    這篇文章主要介紹了python挖礦算力測試程序詳解的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Python字符串匹配算法KMP實(shí)例

    Python字符串匹配算法KMP實(shí)例

    這篇文章主要介紹了Python字符串匹配算法KMP實(shí)現(xiàn)方法,實(shí)例分析了Python針對(duì)字符串操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07
  • Django 實(shí)現(xiàn)對(duì)已存在的model進(jìn)行更改

    Django 實(shí)現(xiàn)對(duì)已存在的model進(jìn)行更改

    這篇文章主要介紹了Django 實(shí)現(xiàn)對(duì)已存在的model進(jìn)行更改,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • 淺談Python實(shí)現(xiàn)貪心算法與活動(dòng)安排問題

    淺談Python實(shí)現(xiàn)貪心算法與活動(dòng)安排問題

    本篇文章主要介紹了淺談Python實(shí)現(xiàn)貪心算法與活動(dòng)安排問題,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • 將Python代碼嵌入C++程序進(jìn)行編寫的實(shí)例

    將Python代碼嵌入C++程序進(jìn)行編寫的實(shí)例

    這篇文章主要介紹了將Python代碼嵌入C++程序進(jìn)行編寫的實(shí)例,盡管通常還是Python代碼中調(diào)用C++程序的情況較多...需要的朋友可以參考下
    2015-07-07
  • python opencv通過4坐標(biāo)剪裁圖片

    python opencv通過4坐標(biāo)剪裁圖片

    圖片剪裁是常用的方法,那么如何通過4坐標(biāo)剪裁圖片,本文就詳細(xì)的來介紹一下,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python的三種主要模塊介紹

    Python的三種主要模塊介紹

    這篇文章介紹了Python的三類主要模塊,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07

最新評(píng)論

西城区| 梁河县| 正镶白旗| 新宾| 黎城县| 南漳县| 牙克石市| 麟游县| 长沙县| 涿鹿县| 德州市| 扎兰屯市| 仪陇县| 宜兰县| 察隅县| 枣庄市| 勃利县| 德昌县| 洛扎县| 古田县| 哈密市| 惠安县| 合水县| 青河县| 揭西县| 双桥区| 荥经县| 安多县| 探索| 清新县| 庆城县| 英德市| 平原县| 宁国市| 名山县| 布拖县| 新密市| 曲松县| 会昌县| 方山县| 洛南县|