狠狠色丁香婷婷久久综合麻豆,国产99久久久久久免费看,与亲女洗澡时伦了视频,一面膜胸口一面膜下免费

django中的中間件

1. 什么是中間件

中間件是django的門戶,在請求響應進入進出django的時候,都需要先經過中間件,用來全局改變django的輸入和輸出。

創新互聯建站長期為近1000家客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為青島企業提供專業的網站建設、網站設計青島網站改版等技術服務。擁有10余年豐富建站經驗和眾多成功案例,為您定制開發。

django中自帶7個中間件,每個中間件都有其特定的功能,并且django支持自定義中間件。

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

2. 為什么要有中間件

django中涉及到全局相關的功能,都可以利用中間件來完成,例如:

1.全局身份的校驗
2.全局用戶權限的校驗
3.全局訪問頻率的校驗等等

3. 如何自定義中間件

django給自定義中間件類提供了5個自定義的方法,分別是:

1.process_request
2.process_response
3.process_view
4.process_templates_response
5.process_exception
前兩個必須掌握,后三個了解即可!

自定義的步驟:

1.在項目文件或者應用文件下創建一個任意名稱的文件夾
2.在該文件夾內創建一個任意名字的py文件
3.在該py文件中定義一個類,該類必須繼承MiddlewareMixin類
(需要導入MiddlewareMixin類,from django.utils.deprecation import MiddlewareMixin)
4.定義的類里面必須至少有一個自定義方法
5.在setting.py里面注冊該中間件的路徑

3.1 process_request方法詳解

1.請求來的時候會經過每一個中間件的process_request方法,經過的順序是setting.py里中間件注冊的順序從上往下
2.該方法有一個request參數
3.如果中間件里沒有該方法,則直接跳過該中間件,執行下一個。
4.如果該方法中返回了HttpResponse對象,則請求將不在往下執行,直接走同級的process_response返回
(flask框架是需要走完所有的類似于proces_response方法)
5.process_request就是用來作全局相關的所有限制功能

3.2 process_response方法詳解

1.響應走的時候會經過每一個中間件的process_response方法,經過的順序是setting.py里中間件從下往下的順序
2.該方法有兩個參數request和response參數
3.該方法必須返回一個HttpResponse對象,默認是返回response,即return response;也可以自定義返回其他
4.如果中間件里沒有該方法,則直接跳過該中間件,執行下一個。

3.3 其他需要了解的方法

process_view
	路由匹配成功之后執行視圖函數之前,會自動執行中間件里面的該放法
	順序是按照配置文件中注冊的中間件從上往下的順序依次執行

process_template_response
	返回的HttpResponse對象有render屬性的時候才會觸發
	順序是按照配置文件中注冊了的中間件從下往上依次經過

process_exception
	當視圖函數中出現異常的情況下觸發
	順序是按照配置文件中注冊了的中間件從下往上依次經過

4.小作業

要求:寫一個中間件,使得每次請求來的時候,不管是urlencoded編碼格式還是json編碼格式傳到后端的數據都變成字典格式封裝到request.data里!

前端頁面的搭建:

簡單輸入框的搭建和兩種提交方式提交數據

<body>
<form action="" method="post">
    <label for="">用戶名:</label>
    <input type="text" name="name" id="id_username">
    <label for="">密碼:</label>
    <input type="text" name="pwd" id="id_password">
    <input type="submit">
    <input type="button" id="btn" value="提交2">
</form>
</body>
<script>
    $('#btn').click(function (){
        $.ajax({
            type:'post',
            url:'',
            data:JSON.stringify({
                'name':$('#id_username').val(),
                'pwd':$('#id_username').val(),
                'csrfmiddlewaretoken':'{{ csrf_token }}',
            }),
            contentType:'application/json',
        })
    })
</script>
</html>

中間件的書寫:

from django.utils.deprecation import MiddlewareMixin
import json

class JsonMiddle(MiddlewareMixin):
    # 請求來的時候經過這個中間件
    def process_request(self,request):
        try:
            # 未出現異常(當前端傳來的是json格式數據時),將json格式數據反序列化放入request.data中
            request.data = json.loads(request.body)
        except Exception as e:
            # 當出現異常(前端傳來的是urlencoded編碼格式的數據時),也將數據交給request.data中
            request.data = request.POST
            # 這個不管前端是什么格式的數據,我后端request.data里的數據格式都是字典格式
            # 只不過request.POST格式的字典格式是QueryDic字典格式,比平常的字典格式更強大的是不能隨意刪除該字典中的值,刪除會保存

中間件的注冊:

后端視圖書寫:

此時urlencoded編碼格式和json格式都是在request.data中以字典形式存在

def index(request):
    if request.method == 'POST':
        print(request.data)
    return render(request,'index.html')

注意點:
1.form表單和ajax提交有可能會重復提交,form表單中(有ajax請求)submin類型和button按鈕都會觸發form表單提交,input標簽的button則不會觸發form表單提交

2.QueryDict本身就是一個字典,但是比字典強大,不能修改值,一修改報錯

3.CommonMiddleware讀一下這個django中間件

名稱欄目:django中的中間件
網頁網址:http://www.hntjjpw.com/article18/dsogidp.html

成都網站建設公司_創新互聯,為您提供微信小程序搜索引擎優化品牌網站設計服務器托管外貿網站建設手機網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設
主站蜘蛛池模板: 曲麻莱县| 监利县| 广宁县| 新巴尔虎右旗| 桐梓县| 固镇县| 康平县| 奉贤区| 松阳县| 修武县| 平舆县| 嘉鱼县| 孝感市| 濮阳市| 绥滨县| 土默特右旗| 阿荣旗| 乳源| 临夏市| 定结县| 平罗县| 九龙坡区| 宝兴县| 上思县| 齐河县| 宿迁市| 怀安县| 金塔县| 青川县| 休宁县| 石柱| 自贡市| 禹城市| 贵德县| 宜良县| 淅川县| 承德县| 社旗县| 千阳县| 珲春市| 同心县|