2014-11-04 81 views
0

我想製作一個裝飾器,它可以防止用戶看到其他配置文件,但可以看到自己的配置文件。如果用戶的網址爲http://example.com/user/?id=5,我希望在我的django裝飾器中獲得id = 5的值。我怎樣才能得到它的任何例子?如何在django裝飾器中訪問參數值表單url

def admin_or_ownership_required(owner): 
    def check_admin_or_owner(user): 
     # pk = request.GET.get('pk', None) 
     # if pk is not None and pk == user.id: 
     #  return True 
     if owner == 'Account': 
      if user.is_superuser or (user.is_active and (user.role == 'admin' or user.role == 'owner')): 
       return True 
      else: 
       return False 
     elif owner == 'User': 
      if user.is_superuser or (user.is_active and (user.role == 'admin' or user.role == 'owner')): 
       return True 
      else: 
       return False 
     else: 
      return False 
    return user_passes_test(check_admin_or_owner) 

這是我的看法代碼

class AccountDetailView(DetailView): 
    template_name = 'api/account_detail.html' 
    model = Account 

    @method_decorator(admin_or_ownership_required('Account')) 
    def dispatch(self, *args, **kwargs): 
     return super(AccountDetailView, self).dispatch(*args, **kwargs) 

如何使用請求參數在admin_or_ownershipl_required裝飾

+0

有幾種方法,請顯示您的查看代碼。 – schneck 2014-11-04 10:17:32

+0

我用編碼編輯了我的問題。我希望代碼能夠完全按照區域進行工作。但我不知道如何使用PK的價值。 – 2014-11-04 10:21:21

回答

0
def check_login(method): 
    @functools.wraps(method) 
    def wrapper(request, *args, **kwargs): 
     if request.GET['id'] == request.user.id 
      # Give your redirect url 
     return method(request, *args, **kwargs) 
    return wrapper 
+0

你能否回答我的問題 – 2014-11-04 10:28:09

0

你可以使用一個混合您查看,在那裏你限制你的情況下, queryset,類似於:

class MixinRestrictedAccount(object): 
    def get_queryset(self): 
     return Account.objects.filter(id=self.request.user.id) 


class AccountDetailView(MixinRestrictedBox, DetailView): 
    [..] 
0

嘗試轉儲kwargs的值,從那裏您可以訪問url參數。例如: 如果有網址,如:

/users/(?P<username>\w+)/$ 

您可以通過kwargs參數訪問該值,在你的裝飾方法傳遞。

kwargs.get("username") 

如果要通過GET方法來訪問URL的參數,那麼你可以嘗試這樣的:

request.GET.get("username") 

的網址,如:

/users/?username=dominic 

感謝您可以通過訪問。