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
  • 相关阅读:
    Golang Gin 框架 Route备注
    golang的时区和神奇的time.Parse
    Linux下查看内存使用情况方法总结
    Golang 图片上绘制文字
    在linux中安装字体
    一键解决 go get golang.org/x 包失败
    go如何进行交叉编译
    Ubuntu中apt与apt-get命令的区别
    linux dns 工具包 -- bind-utils
    nohup 和 &的含义
  • 原文地址:https://www.cnblogs.com/louzi/p/9649678.html
Copyright © 2011-2022 走看看