我正在使用Django,並且要求某些「試用」用戶只激活網站的某個部分 - 任何想法都可以通過有效的方式實現。限制用戶只查看網站的某個部分-Digang
我正在考慮給予付費客戶一個特定ID並將其鏈接到網站的URL以獲得許可。
感謝,
湯姆
我正在使用Django,並且要求某些「試用」用戶只激活網站的某個部分 - 任何想法都可以通過有效的方式實現。限制用戶只查看網站的某個部分-Digang
我正在考慮給予付費客戶一個特定ID並將其鏈接到網站的URL以獲得許可。
感謝,
湯姆
這是一個非常廣泛的問題。一種解決方案是在每個用戶上存儲一個trial
標誌。在經過驗證的請求中,檢查控制器中的User.trial
(可能查看),並有選擇地允許/拒絕對端點的訪問或選擇性渲染頁面的某些部分。
如果您希望使用Django的內置功能,您可以將'trial'視爲權限或用戶組。
我會用這樣的觀點裝飾:
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):
...
我認爲裝飾者是一個乾淨的解決方案。過去我使用了一箇中間件來限制訪問內部測試網站。 – PepperoniPizza
我決定後我的解決方案,我可能甚至得到一些反饋。我有一箇中間件堵在設置中定義的某些路徑的請求/響應,第一中間件:
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'^/',
)
希望這是明確的,至少它可以給你一個不同的方法。
這樣的事情正是我一直在尋找的。謝謝 –
感謝羅布 - 這當然指向我在正確的方向 – VivaNosh
很難提供示例,因爲這些東西是如此依賴於你自己的代碼和情況。查找Django用戶權限和組的示例。 –