我是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...)
,
我很抱歉如果我的问题没有任何意义,谢谢...
1条答案
按热度按时间bvhaajcl1#
我将执行以下操作
1.内部身份验证-在数据库中创建新对象:
类ApiRequest(型号。型号):关键字=模型.外键(APIKey)时间戳=模型.日期时间字段(auto_now_add=True,db_index=True)
1.保存后-您可以计算当天(或24小时)有多少请求-如果超过100 -返回403禁止