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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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