Django(part42)--限制IP请求次数
生活随笔
收集整理的這篇文章主要介紹了
Django(part42)--限制IP请求次数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考,有錯必糾
限制IP請求次數
這個Blog中,我們將使用中間件,實現強制某個IP地址只能向某個地址發送3次GET請求。
在做這個案例之前我們需要先學兩個request的屬性:
- request.META['REMOTE_ADDR'] ,得到遠程客戶端的IP地址
- request.path_info ,得到客戶端GET請求的路由信息
現在,我們在主urls.py中創建路由:
urlpatterns = [re_path(r'^admin/', admin.site.urls),re_path(r'^testlimit/$',views.test_limit), ]在主視圖模塊中增加視圖函數:
def test_limit(request):return HttpResponse("我是測試頁面... ...")創建自動以中間鍵:
class VisitLimit(MiddlewareMixin):'''此中間件限制一個IP地址對應的訪問/testlimit/的次數不能改過3次,超過后禁止使用'''visit_times = {} # 此字典用于記錄客戶端IP地址有訪問次數def process_request(self, request):ip_address = request.META['REMOTE_ADDR'] # 得到IP地址if not re.match('^/testlimit/$', request.path_info):return None#繼續請求times = self.visit_times.get(ip_address, 0)print("IP:", ip_address, '已經訪問過', times, '次!:', request.path_info)self.visit_times[ip_address] = times + 1if times < 3:return Nonereturn HttpResponse('你已經訪問過' + str(times) + '次,禁止再次訪問!')將我們剛創建的中間鍵進行注冊:
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','mymiddleware.checklogin.MyMiddleWare','mymiddleware.checklogin.VisitLimit', ]向http://127.0.0.1:8000/testlimit/發起請求:
查看cmd界面:
IP: 127.0.0.1 已經訪問過 0 次!: /testlimit/ [24/Jun/2020 01:28:57] "GET /testlimit/ HTTP/1.1" 200 25再訪問2次http://127.0.0.1:8000/testlimit/,并查看cmd界面:
IP: 127.0.0.1 已經訪問過 1 次!: /testlimit/ [24/Jun/2020 01:30:40] "GET /testlimit/ HTTP/1.1" 200 25 IP: 127.0.0.1 已經訪問過 2 次!: /testlimit/ [24/Jun/2020 01:30:53] "GET /testlimit/ HTTP/1.1" 200 25當我們第4次向http://127.0.0.1:8000/testlimit/發起請求時,出現如下頁面:
再查看cmd界面:
IP: 127.0.0.1 已經訪問過 3 次!: /testlimit/ [24/Jun/2020 01:31:35] "GET /testlimit/ HTTP/1.1" 200 46總結
以上是生活随笔為你收集整理的Django(part42)--限制IP请求次数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈数字音视频传输网络——AVB[通俗易
- 下一篇: Django(part42)--跨站请求