我有一个列表记录的视图。如果我已经登录,我可以毫无问题地访问它。如果还没有登录并尝试访问该页面,我会被重定向到登录页面。到目前为止一切都很好!
但是在我的测试中我遇到了以下问题:我能够成功登录,但是当我尝试执行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'没有在''
中找到
答案 0 :(得分: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)
...