Decorators são muito úteis quando se precisa de certas condições antes da execução de determinadas views, como por exemplo, views que obrigam o usuário estar logado para ter acesso, tais como Meus Pedidos, Meu Painel, etc.
Para isso utiliza-se o decorator login_required, disponível no pacote django.contrib.auth.decorators. Basta adicioná-lo antes da view desejada da seguinte forma:
@login_required def sua_view(request): #seu código aquiTambém é possível criar decorators personalizados, para verificar certas situações, como preenchimento completo de algum cadastro, se o cliente está com a assinatura de conteúdo em dia, etc. Para criar um decorator, basta fazê-lo da como mostra o exemplo abaixo, em qualquer arquivo ".py". Recomendo criar um arquivo separado para isso.
Exemplo:
Crie um arquivo admin.py na raiz do seu projeto com o seguinte conteúdo:
def nome_decorator(f): def verifica(request, *args, **kwargs): if <CONDICAO DE FALHA A SER TESTADA> # INTERROMPE O FLUXO NORMAL E NÃO EXECUTA A VIEW ASSOCIADA else: # CONDICAO DE SUCESSO, RETORNA AO FLUXO NORMAL return f(request, *args, **kwargs) verifica.__doc__= f.__doc__ verifica.__name__= f.__name__ return verificaEm seu arquivo views.py, onde existe a view a ser associada ao decorator utilize:
from admin import nome_decorator @nome_decorator def sua_view(request): #seu código aquiFique atento para o caminho da importação do decorator, dependendo de onde salvar, pode ser que haja alteração a ser feita na linha de import.
Pode ser que precise de 2 decorators para uma mesma view como no exemplo abaixo:
@login_required @nome_decorator def sua_view(request): #seu código aqui
Para estes casos, as validações se darão na ordem que forem colocados os decorators, de cima pra baixo, ou seja, para o exemplo acima, primeiro será avaliado se o visitante está logado para depois verificar as condições colocadas no decorator personalizado que foi criado.
hasta!