機能的
- メンテナンスモード。ビュー全体または個々のhttpメソッドをオフにできます。
- PATCH、POSTなどのグローバルフォールバックサイトのタイムアウト
- 一般的なビュー、または個々のhttpメソッドのローカルタイムアウト
構成の例を示す方が簡単です:
DJANGO_THROTTLING = { 'all': 1000, 'post': 'callable:helpers.trash.my_callback', 'congestion': 'forum.views.congestion', 'django.contrib.admin.options.change_view': { 'post': False, 'all': None, 'uri': '/admin/forum/post/23/', }, }
カットの下に説明がある他の例。
設置
git clone http://github.com/night-crawler/django-throttling.git cd django-throttling python setup.py install
グローバル調整
構成はセクションで構成され、一番上のセクションはフォールバックで、詳細なルールが存在しない場合にサイト全体に使用されます。
DJANGO_THROTTLING = { 'all': 1000, 'post': 10000, 'congestion': 'forum.views.congestion', }
この例では、すべてのタイプのリクエストに対して、制限は1秒あたり1リクエストに設定され、10秒ごとにリクエストが送信されます。
輻輳は、uri、またはviewです。 この場合、近隣にあるビューは次のように呼び出されます。
def congestion(request, congestion_bundle): user = request.user progress = int(float(congestion_bundle['delta']) / congestion_bundle['timeout'] * 100) c = Context({'user': user, 'congestion_bundle': congestion_bundle, 'progress': progress}) return render_to_response(get_theme_template(user, 'congestion.html'), c, context_instance=RequestContext(request) )
これは、ユーザーにいたずらであり、たとえばN秒待つ必要があることをユーザーに通知します。 ビューには、プログレスバーを備えたスクリプトが提供され、フォームが自動的にオーバーロードされます。 元のビューとその引数のセット全体が輻輳_bundleに渡されるため 、ユーザーにより詳細な情報を伝えることができます。
サイト全体でPOSTを無効にできます。 次に、ユーザーにはHttpResponseBadRequestが表示されます。
DJANGO_THROTTLING = { 'all': 1000, 'post': False, 'congestion': 'forum.views.congestion', }
そして、このようにPOSTを無効にすると、ユーザーはルートに送信されます:
DJANGO_THROTTLING = { 'all': 1000, 'post': '/', 'congestion': 'forum.views.congestion', }
単純なリダイレクトでは不十分な場合は、メンテナンスモード用の独自のハンドラーを作成できます。
DJANGO_THROTTLING = { 'all': 1000, 'post': 'forum.views.maintenance', 'congestion': 'forum.views.congestion', } # forum.views.maintenance def maintenance(request, maintenance_bundle): return HttpPreResponse(maintenance_bundle)
特定の場合にのみビューをブロックする必要がある場合があります。たとえば、フォーラム内の1つのトピックをブロックする場合、またはその他の特別な場合です。 次に、ルールのカスタムハンドラを作成できます。
DJANGO_THROTTLING = { 'all': 1000, 'post': 'callable:helpers.trash.my_callback', # callable: 'congestion': 'forum.views.congestion', } # helpers.trash.my_callback' def my_callback(request, view_func, view_args, view_kwargs): return 'some_strange_key_123', 10000
キーの名前とタイムアウトからタプルを返す必要があります。 タイムアウトは、再びint()、False、view、またはuriにすることができます。
ローカル調整
基本的に同様の構文があります。 オプションキー 'uri'の存在のみが異なります。これにより、スロットルチェックのみを設定できます。
DJANGO_THROTTLING = { 'all': 1000, 'post': 'callable:helpers.trash.my_callback', 'congestion': 'forum.views.congestion', 'django.contrib.admin.options.change_view': { 'post': False, 'all': None, 'uri': '/admin/forum/post/23/', # 'post': 'callable:helpers.trash.my_callback', # 'all': 4000, }, }
途中でいくつかの設定があります:
- DJANGO_THROTTLING_ENABLED :スロットルをオンにし、デフォルトでオフにします。
- DJANGO_THROTTLING_CACHE_EXPIRE :キャッシュに保存されるキーの数を決定します。 デフォルトは60 * 60です。
- DJANGO_THROTTLING_CACHE_PREFIX :キャッシュプレフィックス、デフォルトは「THROTTLING」
- THROTTLING_CACHE_KEY_PATTERNS :キーを生成するためのパターンはここに保存されます。 合計で4つの種類があります:view_method、view、site_method、site。 上書きできます。
- DJANGO_THROTTLING_IGNORE_ADMIN :ユーザーが管理者である場合、スロットルを無効にします。 したがって、接続された認証が必要です
githubには英語の説明があります。