私の django プロジェクトには、投稿、コメント、編集など、サイト上で何かを行うための機能を持つユーザー モデルがあります。迷惑メールを防ぐために、1 日あたりのアクション数を制限する方法を考えていました。 datetime 関連のもの このための機能を作成するために、データをキャッシュ (memcached) に保存することにしました。
編集:解決策が見つかりました:
私は古い実装を使用しており、1 日あたりの投稿数をキャッシュし、1 日をタイムアウトとして設定しています。しかし、選択したキャッシュ キーを 1 日 1 回チェックしてワイプするセロリの非同期 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の制限をどのように処理していますか?
ありがとう