我正在使用 Django,并且只需要某些“试用”用户来激活网站的某个部分——有什么想法可以有效地做到这一点吗?
我正在考虑给付费客户一个特定的 ID,并将其链接到网站的 URL 以获得许可。
谢谢,
汤姆
我正在使用 Django,并且只需要某些“试用”用户来激活网站的某个部分——有什么想法可以有效地做到这一点吗?
我正在考虑给付费客户一个特定的 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
标志。在经过身份验证的请求中,检查User.trial
您的控制器(可能还有视图)并有选择地允许/拒绝访问端点或有选择地呈现页面的某些部分。
如果您希望使用 Django 的内置功能,您可以将“试用”视为权限或用户组。