Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Permissões do Django Rest

Caso

Estou fazendo o challenge back-end-7 e no meu settings.py eu defini a seguinte classe de autenticação padrão:

'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.BasicAuthentication']

Porém uma das atividades era a seleção aleatória de 3 depoimentos do banco de dados, e eu fiz desse jeito na minha views:

...
class DepoimentoHomeViewSet(viewsets.ModelViewSet):
    '''Listando 3 depoimentos aleatórios'''
    serializer_class = DepoimentoSerializer
    http_method_names = ['get']
    
    def get_queryset(self):
            depoimentos = Depoimento.objects.all()
            queryset = random.sample(list(depoimentos), k=3)
            return queryset
...

Com isso, por conta de a minha queryset ter se tornado uma lista, no processo de autenticação é apontado um erro:

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Para solucionar esse erro eu adicionei o permission_classes = [IsAuthenticated] na minha views, o que fez funcionar perfeitamente.

Dúvida:

Gostaria de saber se esse é o método mais certo a se fazer? Por conta de eu ter liberado a permissão. Ou, se seria melhor eu buscar outro método de apresentar os 3 depoimentos aleatoriamente.

Pois na minha cabeça não faz muito sentido eu bloquear o acesso para autenticação e depois permitir o acesso kkkkk

(Mandei essa duvida aqui pois na seção de dúvidas no discord não consegui resolver)

1 resposta
solução!

Oi, José! Tudo bem?

Parabéns pela elaboração da solução para o problema e obrigada por compartilhá-la com a gente aqui no fórum, sua publicação ajuda muito a gente a fortalecer a nossa comunidade.

O método apresentado no tópico é uma abordagem válida para solucionar o problema, entretanto, precisamos destacar que há uma diferença entre autenticação e permissões no Django REST, de forma que, a autenticação verifica a identidade do usuário que está fazendo uma solicitação à API.

Na abordagem apresentada está sendo utilizada a autenticação básica ('rest_framework.authentication.BasicAuthentication') como a classe padrão para autenticação, o que significa que a API exigiria que os usuários se autenticassem antes de acessar qualquer recurso, entretanto, ao retornar uma lista diretamente na função get_queryset, estamos ignorando essa autenticação. Porém, ao adicionar permission_classes = [IsAuthenticated] à view, estamos garantindo que apenas usuários autenticados possam acessar a lista de depoimentos, o que é uma abordagem válida se quisermos restringir o acesso apenas a usuários autenticados.

Somado a isso, deixo como indicação para aprofundamento no tema abordado a documentação oficial do Django sobre autenticações e permissões:

Espero ter ajudado na compreensão do problema. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓