私はDjangoを使用しており、特定の「トライアル」ユーザーがWebサイトの特定の部分をアクティブ化することだけを要求しています-これを行うための効率的な方法に関するアイデアはありますか?
有料の顧客に特定のIDを与え、それを許可を得るためにサイトのURLにリンクすることを考えていました。
ありがとう、
トム
私はDjangoを使用しており、特定の「トライアル」ユーザーがWebサイトの特定の部分をアクティブ化することだけを要求しています-これを行うための効率的な方法に関するアイデアはありますか?
有料の顧客に特定のIDを与え、それを許可を得るためにサイトのURLにリンクすることを考えていました。
ありがとう、
トム
次のようなビューデコレータを使用します。
def paying_only(view):
def _decorated(request, *args, **kwargs):
if not is_paying(request.user):
redirect('page_explaining_that_this_is_for_paying_users_only')
return view(request, *args, **kwargs)
return _decorated
@paying_only
def some_view(request):
...
解決策を投稿することにしました。フィードバックが得られるかもしれません。設定で定義された特定のパスでリクエスト/レスポンスをブロックするミドルウェアがあります。最初はミドルウェアです。
import re
from django.conf import settings
from django.shortcuts import redirect
class InvitationRequired(object):
def process_response(self, request, response):
if not settings.CLOSED_BETA_ACTIVE:
return response
if (hasattr(request, 'user')
and hasattr(request.user, 'is_authenticated')
and request.user.is_authenticated()):
return response
elif (request.path in
settings.CLOSED_BETA_INVITATION_MIDDLEWARE_EXCEPTED_URIS):
return response
elif response.status_code < 200 or response.status_code >= 300:
return response
else:
for regex in \
settings.CLOSED_BETA_INVITATION_MIDDLEWARE_EXCEPTED_PATTERNS:
if re.compile(regex).match(request.path):
return response
return redirect(settings.CLOSED_BETA_INVITATION_MIDDLEWARE_REDIRECT)
settings.py には次のようなものがあります。
CLOSED_BETA_ACTIVE = True
CLOSED_BETA_INVITATION_URL = '/invitation/'
CLOSED_BETA_INVITATION_MIDDLEWARE_REDIRECT = CLOSED_BETA_INVITATION_URL
CLOSED_BETA_INVITATION_MIDDLEWARE_EXCEPTED_PATTERNS = (
r'^/api/v1/',
r'^/static/',
r'^/media/',
r'^/admin/',
r'^/registration/',
r'^/',
)
少なくとも、別のアプローチを提供できることを願っています。
これは非常に幅広い質問です。trial
1 つの解決策は、各ユーザーにフラグを格納することです。認証されたリクエストでUser.trial
、コントローラー (およびおそらくビュー) をチェックし、エンドポイントへのアクセスを選択的に許可/拒否するか、ページの一部を選択的にレンダリングします。
Django の組み込み機能を使用する場合は、「試用版」を権限またはユーザー グループとして表示できます。