booktest30-中間件2

1.在app目錄下的middleware.py裏面增加中間件類

from django.http import HttpResponse
from django.utils.deprecation import MiddlewareMixin


# 中間件類
class BlockedIPSMiddleware(MiddlewareMixin):
    EXCLUDE_IPS = ['127.0.0.1']

    # 中間件函數
    def process_view(self, request, view_func, *view_args, **view_kwargs):
        '''視圖函數調用之前調用這個'''
        userIp = request.META['REMOTE_ADDR']
        print(userIp)
        # 禁止某些IP訪問
        if userIp in BlockedIPSMiddleware.EXCLUDE_IPS:
            return HttpResponse("<h1>Forbidden</h1>")


class TestMiddleware(MiddlewareMixin):
    def __init__(self,get_response=None):
        self.get_response = get_response
        print("init")

    def process_request(self,request):
        '''產生request對象之後,url匹配之前調用'''
        print('process_request')


    def process_view(self,request,view_func,*view_args,**view_kwargs):
        '''url匹配之後,視圖函數調用之前'''
        print("process_view")

    def process_response(self,request,response):
        '''調用視圖函數之後,內容返回之前'''
        print('process_response')
        return response


class ExceptionTestMiddleware(MiddlewareMixin):
    def process_exception(self,request,exception):
        '''視圖函數發生異常時調用'''
        print('process_exception1')

class ExceptionTest2Middleware(MiddlewareMixin):
    def process_exception(self, request, exception):
        '''視圖函數發生異常時調用'''
        print('process_exception2')

2.註銷掉BlockedIPSMiddleware,添加註冊新的中間件

 # 'booktest.middleware.BlockedIPSMiddleware',#註冊中間件類
    'booktest.middleware.TestMiddleware',#註冊中間件類
    'booktest.middleware.ExceptionTestMiddleware',#註冊中間件類
    'booktest.middleware.ExceptionTest2Middleware',#註冊中間件類

 3.訪問http://127.0.0.1:8000/test_middleware兩次,顯示信息如下,init只在啓動服務器後第一次訪問時會執行

4.修改中間件方法process_request,返回HttpResponse,則會產生熔斷,顯示的信息如下

 def process_request(self,request):
        '''產生request對象之後,url匹配之前調用'''
        print('process_request')
        return HttpResponse('process_request')

5.在test_middleware視圖函數中增加下面的代碼,測試錯誤

num='a'+1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章