1

私はDjangoを使用しており、特定の「トライアル」ユーザーがWebサイトの特定の部分をアクティブ化することだけを要求しています-これを行うための効率的な方法に関するアイデアはありますか?

有料の顧客に特定のIDを与え、それを許可を得るためにサイトのURLにリンクすることを考えていました。

ありがとう、

トム

4

3 に答える 3

3

次のようなビューデコレータを使用します。

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):
    ...
于 2013-01-15T14:30:43.580 に答える
2

解決策を投稿することにしました。フィードバックが得られるかもしれません。設定で定義された特定のパスでリクエスト/レスポンスをブロックするミドルウェアがあります。最初はミドルウェアです。

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'^/',
)

少なくとも、別のアプローチを提供できることを願っています。

于 2013-01-15T14:58:08.443 に答える
1

これは非常に幅広い質問です。trial1 つの解決策は、各ユーザーにフラグを格納することです。認証されたリクエストでUser.trial、コントローラー (およびおそらくビュー) をチェックし、エンドポイントへのアクセスを選択的に許可/拒否するか、ページの一部を選択的にレンダリングします。

Django の組み込み機能を使用する場合は、「試用版」を権限またはユーザー グループとして表示できます。

于 2013-01-15T10:38:23.527 に答える