私はDjango 1.11とPython 2.7を使用しています。スロットサービスを私のwebserviceに含めるようにしました。これはDjangoがあなたのためにすべての仕事をするので、最初はかなり簡単でした。 は、しかし、今、私はだけスロットルの私の見解の一つと認証されたユーザーを区別し、「バースト」率を設定として aswellログインユーザー(例えば毎分5つのリクエスト)と「持続的な」レートに望んでいました(1日あたり100リクエスト)。djangoの1つのビューで2つのスロットルレートを設定する
これを達成するには、私は4スロットル・クラスを構築しました:
class SustainedAnon(AnonRateThrottle):
rate = '100/day'
class BurstAnon(AnonRateThrottle):
rate = '6/minute'
class SustainedUser(UserRateThrottle):
rate = '1000/day'
class BurstUser(UserRateThrottle):
rate = '20/min'
それはドキュメント(Django Throtte Docs)に応じて必要とされていないように私には全くsettings.pyを変更しませんでした。 私が編集したファイルだけが、私は私の統計クラスに次の行を追加した私のviews.pyた
class Statistics(APIView):
throttle_classes = (SustainedAnon, BurstAnon, SustainedUser, BurstUser)
それはほとんど行うことになっているものを行います。 Statisticsクラスを抑制し、ログインしているユーザーと匿名ユーザーを別々に調整するだけです()。レートを正しく調整しません。 ログインしていないときは、3つのリクエストのうち6つのリクエストの後で、20の代わりに10のリクエストの後でログインすると、アプリケーションがスロットルを開始します。
すべてのスロットルクラスにcache-request-valueを設定するので、 (ログインしていないときは、SustainedAnonとBurstAnonと呼ばれる)。
しかし、なぜそれが起こっているのですか?そして、djangoに「スロットルを一度」と言うことができますか?
私はすでにそれを試してみましたが、うまく動作しますが、ONE Viewに2つのスコープを追加することはできないようです。 –
もちろん可能です。 http://www.django-rest-framework.org/api-guide/throttling/#setting-the-throttling-policyでは、1つのビューに特定のスロットルを設定する方法を説明しています。 – Linovia
ありがとうございました。 –