1
resposta

[Sugestão] Refatoração do código

Aproveitando a aula em questão, entendemos que estamos utilizando Django que prioriza o DRY, portanto sugiro um método para não ficar repetindo os 2 atributos de classe sobre autenticação, facilitando a leitura e manutenção

Como não são variáveis, não foi possível criar uma função com esse retorno, mas foi possível criar um class que chamei de AuthenticatedMaster, tendo apenas os 2 atributos de authentication_classes e permission_classes. Desta forma, foi possível herdar essa classe nas demais, eliminando a necessidade de chamar estes atributos novamente, caso haja necessidade de novas ViewSet, um exemplo abaixo de como fica:

class AuthenticatedMaster:
    
    authentication_classes = [BasicAuthentication]
    permission_classes = [IsAuthenticated]
    
#Exemplo de um ViewSet
class EstudanteViewSet(AuthenticatedMaster, viewsets.ModelViewSet):
    
    queryset = Estudante.objects.all()
    serializer_class = EstudanteSerializer
    
#[Abaixo, demais códigos que não precisam mais instancias as autenticações, pois já herdam ela]
1 resposta

Oi Gabriel! Tudo certo?

Sua sugestão de refatoração é excelente e está totalmente alinhada com o princípio DRY (Don't Repeat Yourself), que o Django realmente prioriza. Criar uma classe base como AuthenticatedMaster para centralizar as configurações de autenticação e permissão é uma ótima maneira de manter o código mais limpo e fácil de manter.

Ao herdar essa classe em seus ViewSets, você evita a repetição desnecessária de código e facilita futuras alterações. Por exemplo, se você decidir mudar o tipo de autenticação ou permissão, só precisará fazer isso em um único lugar, e todas as suas views que herdam de AuthenticatedMaster serão automaticamente atualizadas.

Seu exemplo está claro e bem estruturado. Aqui está um exemplo de como você pode aplicar essa ideia:

class AuthenticatedMaster:
    authentication_classes = [BasicAuthentication]
    permission_classes = [IsAuthenticated]

class EstudanteViewSet(AuthenticatedMaster, viewsets.ModelViewSet):
    queryset = Estudante.objects.all()
    serializer_class = EstudanteSerializer

class CursoViewSet(AuthenticatedMaster, viewsets.ModelViewSet):
    queryset = Curso.objects.all()
    serializer_class = CursoSerializer

class MatriculaViewSet(AuthenticatedMaster, viewsets.ModelViewSet):
    queryset = Matricula.objects.all()
    serializer_class = MatriculaSerializer

Dessa forma, você mantém o código mais organizado e alinhado com boas práticas de desenvolvimento.

Espero ter ajudado e bons estudos!

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