= Declarando seu próprio Signal = Às vezes é necessário requisitar uma informação ou permitir que gatilhos sejam adicionados a determinados comportamentos de sua aplicação. Os signals são recursos criados para permitir que isso seja possível. O conceito de signal e dispatcher é o de vincular uma função a um signal, ou seja, a um gatilho pré-declarado que será chamado quando um evento ocorrer. O dispatcher é o pacote responsável por vincular uma função ao signal e por chamá-lo quando necessário. Uma grande vantagem de signals sobre outras formas de se fazer isso é que com signals é possível vincular quantas funções quiser a um mesmo signal, que eles serão chamados em ordem. Siga os passos abaixo: 1. Supondo que sua aplicação se chama "minha_app" que contenha as classes "Produto" e "Categoria", crie um arquivo "app_signals.py" em sua aplicação e insira as linhas abaixo:: {{{ from django.dispatch import Signal obter_informacoes_adicionais_do_produto = Signal() }}} como o nome sugere, vamos criar um comportamento para requisitar informações adicionais de um determinado produto e permitir que várias funções para isso sejam chamadas em tal momento sem nenhum vínculo direto. 2. Agora edite o arquivo "views.py" de sua aplicação, adicionando as seguintes linhas:: {{{ from models import Produto from app_signals import obter_informacoes_adicionais_do_produto def produto(request, produto_id): produto = Produto.objects.get(id=produto_id) informacoes_adicionais = [] obter_informacoes_adicionais_do_produto.send( produto, informacoes_adicionais=informacoes_adicionais, request=request ) return render_to_response( 'minha_app/produto.html', locals(), ) }}} esta view está preparada para carregar as informações adicionais numa lista que receberá essas informações através do signal. 3. Crie agora um template na pasta de templates de sua aplicação, com o nome "produto.html" (ou seja, "minha_app/templates/produto.html"):: {{{
{{ produto.descricao }}