Djangoでの停止の要求の速度を抑制する


サーバーが動作している場合、サーバーアプリケーションが実行されている場合、要求がサーバーによって実行されず、応答またはエラーを返さないことはありません.
ただし、特定のエンドポイント上の要求の数を調整したい場合があります.

問題


あなたは、パスワードの変更要求が行われたときにSMSの検証のための特別なエンドポイントを持っている.いいね.あなたは、10回のSMSを要求し、リクエストが実行されるボタンをクリックする特別なユーザーがいるまで.つまり、9台の高価なSMSが請求された.
すごい!我々は、1分後に要求された次のSMSを許可する方法をしたい.Djangoでそれをする方法?

解決策


私たちは絞りを使用します.リクエストが許可されているかどうかを決定する方法でパーミッションに似ています.しかし、それは一時的な状態を示して、クライアントがAPIに作ることができる要求の速度を制御するのに用いられます.
あなたがルータで登録されるSMS ViewSetを持っていると言いましょう.このようなPYファイル.
class SMSViewSet(viewsets.ViewSet):
    http_method_names = ("post",)

...
router.register(r"password", viewsets.SMSViewSet, basename="password")
設定する前に、新しい属性をSMSViewSet クラスthrottle_scope .
class SMSViewSet(viewsets.ViewSet):
    http_method_names = ("post",)
    throttle_scope = "password-reset"
...
そして最後にREST_FRAMEWORK の設定settings.py ファイルを追加DEFAULT_THROTTLE_CLASSESDEFAULT_THROTTLE_RATES 設定.
REST_FRAMEWORK = {
    'DEFAULT_THROTTLE_CLASSES': [
        'rest_framework.throttling.ScopedRateThrottle',
    ],
    'DEFAULT_THROTTLE_RATES': {
        'password-reset': '1/minute',
    }
}
ドキュメントに続いてScopedRateThrottle クラスはAPIの特定の部分へのアクセスを制限するために使用できます.このスロットルは、アクセスされているビューが.throttle_scope プロパティ.
あなたは絞りについての詳細を学ぶことができますhere .
記事投稿bloggu.io . 無料でお試しください.