2013-01-15 61 views
0

我正在使用Django,並且要求某些「試用」用戶只激活網站的某個部分 - 任何想法都可以通過有效的方式實現。限制用戶只查看網站的某個部分-Digang

我正在考慮給予付費客戶一個特定ID並將其鏈接到網站的URL以獲得許可。

感謝,

湯姆

回答

1

這是一個非常廣泛的問題。一種解決方案是在每個用戶上存儲一個trial標誌。在經過驗證的請求中,檢查控制器中的User.trial(可能查看),並有選擇地允許/拒絕對端點的訪問或選擇性渲染頁面的某些部分。

如果您希望使用Django的內置功能,您可以將'trial'視爲權限或用戶組。

+0

感謝羅布 - 這當然指向我在正確的方向 – VivaNosh

+0

很難提供示例,因爲這些東西是如此依賴於你自己的代碼和情況。查找Django用戶權限和組的示例。 –

1

我會用這樣的觀點裝飾:

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): 
    ... 
+0

我認爲裝飾者是一個乾淨的解決方案。過去我使用了一箇中間件來限制訪問內部測試網站。 – PepperoniPizza

1

我決定後我的解決方案,我可能甚至得到一些反饋。我有一箇中間件堵在設置中定義的某些路徑的請求/響應,第一中間件:

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

希望這是明確的,至少它可以給你一個不同的方法。

+0

這樣的事情正是我一直在尋找的。謝謝 –

相關問題