Django Ninja -存储来自用户的API请求总数,限制并过滤它

hiz5n14c  于 2022-12-14  发布在  Go
关注(0)|答案(1)|浏览(148)

我是django的新手,目前正在使用Django Ninja Rest Framework处理API。
在本例中,每次我从该模型创建新APIKey并将其附加到所选用户时,用户都将拥有唯一的APIKey。
这是我的APIKey模型:

### NOTE - This is just for testing, Not a real model, see the link below

class APIKey(models.Model):
    key         = models.CharField(max_length=64) # i know this should be unique, just for demo :)
    user        = models.ForeignKey(get_user_model(), related_name='free_key', on_delete=models.CASCADE)
    label       = models.CharField(max_length=40)
    revoked     = models.BooleanField(default=False)
    created_at  = models.DateTimeField(auto_now_add=True)
    expires_at  = models.DateTimeField(null=True, blank=True)

此模型仅用于测试目的I actually use this用于我的项目并修改它。

因此,我的API端点需要 *API密钥 * 进行身份验证(我创建的对应于特定用户的 *API密钥 ),
然后i implement and follow the steps here,它正常工作
我的问题是:
1.每个用户都有一个唯一的API密钥。如何计算和存储用户每次向端点发出请求时的总请求?我应该添加request_total字段到我的APIKey模型还是创建一个新模型?我应该使用自定义中间件?还是应该使用Redis或其他什么?如果是这样,如何实现它?
1.对于此方案,根据用户的总请求数实施每日限制的最佳方式是什么?***例如,
**,用户每日限制请求为100个请求,并且每00:01AM重置一次
1.根据第一个问题,建议用什么方法来过滤总请求并显示给相应的用户?例如,在Django视图中,显示过去7天中每天的总请求

作为一条附加信息,我的API端点主要是GET方法,执行函数调用,执行一些计算或其他操作,并返回一些数据,不查询数据库(Model.objects.get(id=id), etc...)

我很抱歉如果我的问题没有任何意义,谢谢...

bvhaajcl

bvhaajcl1#

我将执行以下操作
1.内部身份验证-在数据库中创建新对象:
类ApiRequest(型号。型号):关键字=模型.外键(APIKey)时间戳=模型.日期时间字段(auto_now_add=True,db_index=True)
1.保存后-您可以计算当天(或24小时)有多少请求-如果超过100 -返回403禁止

相关问题