zoukankan      html  css  js  c++  java
  • throttle_classes 60秒访问10次限制

    model:

    class LoginModel(models.Model):

    username = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    type_choice = (
    (0, "普通用户"),
    (1, "VIP"),
    (2, "SVIP"),
    )
    user_type = models.IntegerField(choices=type_choice)
    ip_addr = models.CharField(max_length=32)
    visits = models.IntegerField()

    def __str__(self):
    return self.username



    自定义类
    LOGIN_CODE = {}
    class FrequencyThrottles:

    def allow_request(self, request, view):
    ip_addr = request.META.get("REMOTE_ADDR")

    if ip_addr:

    models.LoginModel.objects.filter(ip_addr=ip_addr).update(visits=F("visits") + 1)
    visit_times = models.LoginModel.objects.filter(username=request.user).first().visits
    if ip_addr not in LOGIN_CODE:
    LOGIN_CODE[ip_addr] = {}
    if not LOGIN_CODE[ip_addr]:
    LOGIN_CODE[ip_addr]["limit_time"] = datetime.datetime.now() + datetime.timedelta(seconds=60)
    LOGIN_CODE[ip_addr]["visit_times"] = visit_times + 10
    LOGIN_CODE[ip_addr]["blacklist"] = []
    elif datetime.datetime.now() <= LOGIN_CODE[ip_addr]["limit_time"] and visit_times >= LOGIN_CODE[ip_addr][
    "visit_times"] and ip_addr not in LOGIN_CODE[ip_addr]["blacklist"]:
    LOGIN_CODE[ip_addr]["blacklist"].append(ip_addr)
    if datetime.datetime.now() > LOGIN_CODE[ip_addr]["limit_time"] :
    LOGIN_CODE[ip_addr] = {}

    if ip_addr not in LOGIN_CODE[ip_addr].get("blacklist", []):
    return True
    else:
    return False

    def wait(self):
    pass
  • 相关阅读:
    20170706xlVBA根据工资汇总表生成个人工资条
    20170706xlVBA汇总历时对阵数据
    20170706xlVBA批量提取word表格中的自我评分
    python学习笔记(一)
    哈希表
    前缀表达式、中缀表达式、后缀表达式

    环形链表
    队列
    稀疏数组
  • 原文地址:https://www.cnblogs.com/louzi/p/9649678.html
Copyright © 2011-2022 走看看