Django 中間件實現用戶認證與IP頻率限制


1.URL訪問過濾

通過裝飾器進行用戶認證非常方便,但是在添加部分需要認證的功能時,就需要再次添加裝飾器,如果通過中間件來實現,就不需要再進行添加的操作.

import re
LOGIN_URL = '/login/'
class MyLogin(MiddlewareMixin):
    def process_request(self, request):
        # 獲取當前頁面的路由
        url = request.get_full_path()
        path = request.path
        print(path)
        # 通過session判斷是否登錄
        is_login = request.session.get('is_login')
        # 判斷當前頁面是否是login頁面
        if not re.match(path, LOGIN_URL):
            if not is_login:
                # 如果沒有登錄,重定向到login頁面
                return redirect('/login/?next=%s' % url)

    def process_response(self, request, response):
        return response

2.做IP訪問頻率限制

為了防止某些IP惡意高頻訪問服務器,可以對這些IP進行限制,進行攔截.

import time
class OverTime(MiddlewareMixin):
    def process_request(self, request):
        # 獲取客戶端IP地址
        IP = request.META.get('REMOTE_ADDR')
        # 獲取該IP地址的值,如果沒有,給一個默認列表[]
        lis = request.session.get(IP, [])
        # 獲取當前時間
        curr_time = time.time()
        # 判斷操作次數是否小於3次
        if len(lis) < 3:
            # 如果小於3次,添加本次操作時間
            lis.append(curr_time)
            # 保存
            request.session[IP] = lis
        else:
            # 如果本次操作時間減去第一次操作時間小於60秒,則不讓其繼續操作
            if time.time() - lis[0] < 60:
                return HttpResponse('操作過於頻繁')
            else:
                # 如果大於60秒則交叉復制
                lis[0], lis[1], lis[2] = lis[1], lis[2], time.time()
                # 保存
                request.session[IP] = lis

    def process_response(self, request, response):
        return response


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM