Decorators
Ás vezes precisamos que algumas funções passem por um certo controle antes de serem executadas, tais como verificação de usuario logado, passar algum parâmetro comum a várias funções. Ou ainda as vezes precisamos que as funções retornem um certo tipo de conteúdo tratado, que tem como exemplo retornar um json do retorno da função. Para isso servem os decorators!
Exemplo decorator que retorna um json:
[python]
# -*- encoding: utf-8 -*-
from simplejson import dumps
def serialize(function):
"""Decorator that returns a json from result of function"""
def dumper(*args, **kwds):
"""Decorator's function that call the function passed to decorator and returns its content as json"""
return dumps(function(*args, **kwds))
# Add original function name and docstring to that who calls it, to generate documentation
dumper.func_name = function.func_name
dumper.func_doc = function.func_doc
return dumper
@serialize
def select_values(model_filter):
"""Returns id and name to use in a dynamic HTML Select Tag for model filtration"""
return [{u'value':field.id, u'content':field.name} for field in model_filter]
[/python]
Este exemplo retorna um json para criar um select dinamicamente em uma página HTML.
O módulo simplejson não vem com o python, e pode ser instalado usando o gerenciador de pacotes de algumas distribuições linux (testado no Debian e Ubuntu), ou usando o easy_install, que é instalado no seu sistema através do pacote setuptools:
# easy_install simplejson
Para criar o select dinamicamente na página, você pode utilizar o seguinte javascript:
[javascript]
function create_option(value, content){
var option = document.createElement('option');
option.value = value;
option.innerHTML = content;
return option;
}
function create_select(content){
// this content is the returned json
content = eval(content);
var select = document.createElement('select');
for (var i=0; i
}
document.body.appendChild(select);
}
[/javascript]
Para pegar o conteudo você precisará gerar um cgi, uma aplicação utilizando um framework como Django, ou outro qualquer, e tem que saber um pouco de Ajax
Deixe um comentário |

