国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

深入理解Django的中間件middleware

2020-02-22 23:28:30
字體:
來源:轉載
供稿:網友

本文講述的內容基于 Django 1.11

摘要

Django 中的中間件(middleware),是一個鑲嵌到Django的request/response處理機制中的一個hooks框架,是一個修改django全局輸入輸出的一個底層插件系統。讓我們可以自定義想要的一些功能來處理用戶的請求。

在Django中,中間件其實就是一個類,在類中包含一組特定的功能,在請求到來或者結束時,Django會根據我們定義的中間件規則執行中間件中對應的方法,一個 Django 項目默認激活的中間件在我們項目中的配置中可以看到是這個樣子的:

settings.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',]

MIDDLEWARE這里列表中的每一個元素,其實就是一個個單獨的中間件,舉例來說:django.middleware.csrf.CsrfViewMiddleware這個中間件,作用就是在我們的 form 表單提交請求的時候,提交的時候必須要帶上csrf_token,否則就不會正確提交。

中間件使用也需要講究順序,下一層依賴上一層的封裝,例如,我們的AuthenticationMiddleware是一個認證中間件,在session 中保存認證用戶的信息,但是他必須依賴于SessionMiddleware才可以被正確使用,所以他也必須在SessionMiddleware之后。但是具體的順序問題可以參考這里

中間件結構

中間件類中需要包含以下處理方法:

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,則按照順序繼續向下執行 如果為 HttpResonse 對象,則直接將這個對象返回給用戶

此處有一個版本前后的區別,請大家注意區分:

在 Django1.10之后, 當某個中間件,例如CsrfViewMiddleware請求process_request沒有返回 None 后,這個請求會交給CsrfViewMiddleware的process_response來返回,即返回給相同一層的中間件來返回:

在 Django1.10之前的版本,會返回到最底層的中間件來返回:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宜君县| 长子县| 博客| 新龙县| 泰兴市| 翁源县| 陵川县| 衡阳县| 绿春县| 徐汇区| 吴江市| 建湖县| 潮安县| 彭山县| 固原市| 托克逊县| 崇左市| 鲁甸县| 会同县| 怀远县| 佳木斯市| 方正县| 广灵县| 石台县| 呼图壁县| 建平县| 都江堰市| 张家港市| 东乡族自治县| 和龙市| 建昌县| 汽车| 庆城县| 固阳县| 砚山县| 枣庄市| 伊通| 济宁市| 白山市| 耿马| 大丰市|