Bonjour à tous,
J'essaie actuellement de mettre en place une vue qui soit accessible un certains nombre de fois pour un utilisateur en fonction d'une variable. Par exemple, un compte peut y accéder 10 fois par minute et un autre 20. Pour cela j'essaye d'utiliser la bibliothèque django-ratelimit. J'ai essaye plusieurs choses mais sans succès. Pour le moment il m'est seulement possible de limiter la vue à tous les utilisateurs un nombre fixe de fois en utilisant ce décorateur devant la vue:
@ratelimit(key='get:user', rate='5/m')
Mais bien sur je souhaite que chaque utilisateur est sa propre restriction.
J'ai essayé ça mais sans succès.
models.py : j'ai étendu le model user pour y mettre un nombre de rate limite par user
1 2 3 4
|
class Profil(models.Model):
user=models.OneToOneField(User, on_delete=models.CASCADE)
rate=models.IntegerField(default=0) |
et voici ma vue:
views.py
1 2 3 4 5 6 7 8 9 10 11 12
|
@method_decorator(login_required, name='dispatch')
class MyView(RatelimitMixin, View):
ratelimit_key='user'
ratelimit_rate='10/m'
ratelimit_block=True
ratelimit_method='GET'
def get(self, request, *args, **kwargs):
rate=str(Profil.objects.get(user=self.request.user).rate)
self.ratelimit_rate=rate+'/m'
rate=str(Profil.objects.get(user=self.request.user).rate)
print(is_ratelimited(request, key='get:Profil.user', rate=rate+'/m',group=str(request.user))) |
Je précise que ce code ducoup ne fonctionne pas et chaque utilisateur peut y accéder 10 fois par minute.
Avez vous une idée d'où vient mon erreur ou d'une manière différente de l'implémenter?
Merci d'avance
Partager