Maison >développement back-end >Tutoriel Python >Exemple de code du middleware Django implémentant l'authentification des utilisateurs et la limitation de la fréquence IP

Exemple de code du middleware Django implémentant l'authentification des utilisateurs et la limitation de la fréquence IP

不言
不言avant
2018-11-24 15:59:232664parcourir

Le contenu de cet article concerne les exemples de code du middleware Django pour implémenter l'authentification des utilisateurs et la limitation de la fréquence IP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

1. Filtrage d'accès aux URL

L'authentification des utilisateurs via des décorateurs est très pratique, mais lors de l'ajout de certaines fonctions nécessitant une authentification, vous devez à nouveau ajouter des décorations si implémenté via un middleware, il n'est pas nécessaire d'ajouter des opérations supplémentaires

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. Limiter la fréquence d'accès IP

Afin d'empêcher certaines IP malveillantes à haute fréquence. l'accès au serveur peut être restreint et intercepté

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(&#39;操作过于频繁&#39;)
            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
.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer