Django:http_权限干扰测试

2024-05-29 02:31:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表记录的视图。如果我已经登录,我可以访问它没有问题。如果我还没有登录并尝试访问该页面,我将被重定向到登录页面。到目前为止还不错

但是在我的测试中,我遇到了以下问题:我能够成功登录,但是当我尝试执行get以列出记录时,我得到了403(权限被拒绝)和302(重定向,可能是登录页面)。我不明白发生了什么事。我知道http_权限会干扰测试,因为我已经对http_权限和测试通过进行了注释。我是否必须向测试用户授予此http_权限?有人能解释一下吗?这是我的密码:

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 ''


Tags: pyselftruehttp权限getobjectsmodels
1条回答
网友
1楼 · 发布于 2024-05-29 02:31:38

找到了解决办法!通过查看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)
    ...

相关问题 更多 >

    热门问题