2017-09-25 50 views
0

我有一個列表記錄的視圖。如果我已經登錄,我可以毫無問題地訪問它。如果還沒有登錄並嘗試訪問該頁面,我會重定向到登錄頁面。到現在爲止還挺好!Django:http_permissions干擾測試

但在我的測試中,我有以下問題:我能夠成功登錄,但是當我嘗試執行獲取列出記錄時,我得到了403(拒絕權限)和302(重定向,可能會登錄頁面)。我不明白髮生了什麼事。我知道http_permissions干擾了測試,因爲我已經評論了http_permissions並通過了測試。我必須將這個http_permissions授予測試用戶嗎?任何人都可以對此有所瞭解?這裏是我的代碼:

teleconsultoria/models.py

... 
class Bibliografia(BaseModel): 
    ativa = models.BooleanField(u'Ativa', default=True) 
    link = models.CharField(u'Link', blank=True, max_length=2000,) 
    nome = models.CharField(u'Nome', blank=False, max_length=255,) 
    arquivo = SizeRestrictedFileField(
     u'PDF da Bibliografia', upload_to='bibliografia', blank=True, null=True, 
    ) 

    class Meta: 
     verbose_name = u'Bibliografia' 
     verbose_name_plural = u'Bibliografias' 
     permissions = ( 
      ('ver_bibliografia', u'Pode ver bibliografia'), 
      ('criar_bibliografia', u'Pode criar bibliografia'), 
      ('alterar_bibliografia', u'Pode alterar bibliografia'), 
      ('excluir_bibliografia', u'Pode excluir bibliografia'), 
     ) 
... 

teleconsultoria/views.py

... 
class BibliografiaListView(ModelListView):                  
    model = Bibliografia                      
    app_name = 'teleconsultoria'                    
    table = BibliografiaTable                     
    search_fields = ('id', 'ativa', 'nome', 'link')               
    http_permissions = ('teleconsultoria.ver_bibliografia',)             

    def get_queryset(self, request):                   
     return self.model.objects.order_by('id')                

... 

teleconsultoria/tests.py

def test_ver_lista_bibliografias_se_existirem_bibliografias(self): 
    Bibliografia.objects.create(**{'nome': 'Bibliografia 1'}) 
    Bibliografia.objects.create(**{'nome': 'Bibliografia 2'}) 
    Bibliografia.objects.create(**{'nome': 'Bibliografia 3'}) 
    response = self.client.get('/teleconsultoria/bibliografia/') 
    self.assertIn('3 Bibliografias', response.content) 

AssertionError: '3 Bibliografias' not found in ''

+0

哪裏是你的登錄handeld? Django的Webserver服務器還是直接在Django中?我們在說什麼樣的登錄?基本身份驗證? – Ben

+0

直接在Django。 Auth使用自定義網址進行。在測試中,我們像這樣使用它:'self.client.post('/ accounts/login /?next = /',data = data,follow = True)' –

回答

0

找到解決方案!通過Django文檔去,我發現我可以手動添加必要的權限:

https://docs.djangoproject.com/en/1.8/topics/auth/default/#permissions-and-authorization

我的主要測試案例弄成這個樣子:

class BibliografiaCrudTestCase(BaseFluxoTestCase):                

    dados = {}                         
    permissions = ['ver_bibliografia', 'criar_bibliografia', 'alterar_bibliografia', 'excluir_bibliografia'] 

    def setUp(self):                       
     super(BibliografiaCrudTestCase, self).setUp()               
     self.login()                       
     usuario = Usuario.objects.first()                  
     for permission in Permission.objects.filter(codename__in=self.permissions):       
      usuario.user_permissions.add(permission.id) 
    ...