2016-04-05 26 views
1

Projem için bir görünüm için özel izinler uygulamaya çalışıyordum.DRF Özel İzin görünümü engellemiyor

Oldukça basit
class TeamViewPermission(permissions.BasePermission): 
    """ 
    Global permission for viewing team pages 
    """ 

    def has_permission(self, request, view): 
     team_id = self.kwargs.get('team_id') 
     teamqs = MAIN_TEAMS.all() 
     pk_list = [] 
     for item in MAIN_TEAMS: 
      pk_list.append(str(item.pk)) 
     if team_id in pk_list: 
      return True 
     return False 

, çekler yapılandırma ekibi isteğinde ekip sayfayla eşleşen ve bu durumda değilse dışarı kullanıcıyı engelleyip engellemediğini: Şöyle ki, permissions.py yılında iznini yarattı.

views.py:

class PlayerList(ListView): 

    model = player_model 
    template_name = 'player_list.html' 
    permission_classes = (TeamViewPermission,) 

def get_team(self): 
    if not hasattr(self, '_team'): 
     team_id = self.kwargs.get('team_id') 
     self._team = team_model.objects.get(pk=self.kwargs.get('team_id')) 
    return self._team 

def get_context_data(self, *args, **kwargs): 
    context = super().get_context_data(*args, **kwargs) 
    context['team'] = self.get_team() 
    return context 

def get_queryset(self, *args, **kwargs): 
    queryset = super().get_queryset(*args, **kwargs) 
    return queryset.filter(team_id=self.kwargs.get('team_id')) 

Ben bunu debug çünkü zaman olması gerektiği, bu sayfayı engelleme değil rağmen sayfa, Doğru veya Yanlış döndürür bir gerçeği biliyorum? Sayfa için False değerini döndürür, ancak sayfanın hala döndüğü gibi doğru erişebiliyorum. Burada bir şey eksik miyim?

+0

Görünümünüzün kodunu ekleyebilir misiniz? – ilse2005

+0

Evet, şimdi ekledim. Gerçekten orada çok fazla – dnsko

cevap

2

Djangos sınıf tabanlı görünümleri ve DRF görünümlerini karıştırıyor gibi görünüyor. ListView django'dan ve DRF'den NOT'tan sınıf tabanlı bir görünümdür. Bu nedenle permission_classes ayarlanmasına izin verilmez. DRF api görünümlerini nasıl kullanacağınızı görmek için the docs numarasını kontrol edin.

+0

Ah görüyorum .. Ne bir haha ​​haha. Bir dahaki sefere daha fazla dikkat edeceğim. Yardım için teşekkürler! – dnsko

+0

Rica ederim. Cevabım yardım ederse, kabul et ve cevap ver, lütfen. – ilse2005

+0

Sure thing, upvoted – dnsko

İlgili konular