2017-09-25 4 views
0

私はリストレコードを持っています。すでにログインしている場合は、問題なくアクセスできます。まだログインしておらず、ページにアクセスしようとすると、ログインページにリダイレクトされます。ここまでは順調ですね!Django:http_permissionsがテストを妨害しています

私のテストでは、私は正常にログインすることができますが、レコードを取得するためにgetを実行しようとすると、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はありますか? WebサーバーがDjangoの直前、または直接Djangoに入っていますか?私たちはどんな種類のログインをしていますか?基本認証? – Ben

+0

直接djangoにあります。認証はカスタムURLを使用して行われます。テストでは、 'self.client.post( '/ accounts/login /?next = /'、data = data、follow = True)' –

答えて

0

解決策を見つけました!私の主なテストケースは次のように終わった

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

:Djangoのドキュメントを経て、私は手動で必要な権限を追加することができた

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) 
    ... 
関連する問題