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 aqui
També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 verifica
Em 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 aqui
Fique 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!
Nenhum comentário:
Postar um comentário