我的 django 项目有一个用户模型,它具有在网站上执行操作的功能,例如发布内容、评论、编辑等。我在想办法限制每天的操作次数以防止垃圾邮件,而不是陷入烦人的状态与日期时间相关的东西我决定只将数据存储到缓存(memcached)中,为此创建一个功能。
编辑:找到解决方案:
我正在使用旧的实现,每天缓存帖子的数量,并将一天设置为超时。但是还有一个 celery 异步 cron 作业,它每天检查和擦除一次选定的缓存键。
所以我使用下面的原始代码,加上这个:
from django.core.cache import cache
from lib.cache_keys import daily_count_key
from django.contrib.auth.models import User
@periodic_task(run_every=crontab(hour='*/24')) # AKA run once a day
def wipeDailyLimits():
users = User.objects.all()
for user in users:
cache.delete(daily_count_key("modelone", user))
cache.delete(daily_count_key("modeltwo", user))
cache.delete(daily_count_key("modelthree", user))
例子:
def post_entry(request):
# post the entry
daily_post_count = cache.get(request.user.id + "entrycount")
if daily_post_count >= 5:
return error
if daily_post_count is None:
daily_post_count = 1
if daily_post_count < 5: # 5 posts per day
daily_post_count += 1
cache.set(request.user.id + "entrycount", daily_post_count , 86400)
# Unix one day time out
# return regular
到目前为止,这个策略看起来不错,一切正常,但我想知道用户是否可以使用任何漏洞或技巧来破坏这个系统?如果是这样,大多数人如何处理 django 的限制?
谢谢