Algumas dúvidas sobre implementação de páginas de erro customizadas no Web2Py
Pergunta
Estou tentando implementar um decorador para páginas de erro personalizadas no Web2py, conforme um dos Todos Haiti.Referência -http://web2py.com/AlterEgo/default/show/75
Estou tentando mantê -lo como um módulo no diretório /módulos, para que eu possa importá -lo para os controladores e colocar o decorador adequadamente.
Eu mantive o erro de manuseio de erros decorador como /modules/onerror.py
e estou importando assim de um controlador, digamos (or.py) -
exec('from applications.%s.modules.onerror import onerror as onerror'
% request.application)
O objeto HTTP não estava disponível em onerror.py, então fiz um -
from gluon.http import *
Mas então eu li que o objeto de solicitação também não está disponível para o decorador, como na linha -
filename=os.path.join(request.folder,'views/errors/error%i.html'%status)
Tenho algumas duvidas -
O diretório /modules é um bom lugar para manter esse componente reutilizável?
Os módulos no diretório /módulos são carregados automaticamente à medida que uma nova instância do web2py é criada?Se sim, como posso acessá -los em um controlador?
Existe uma maneira de passar o objeto de solicitação para este decorador do meu controlador?Dicas são bem-vindas.
Meu onerror.py atual - http://paste.pocoo.org/show/186165/Do jeito que estou tentando usar em um controlador - http://paste.pocoo.org/show/186167/
Deixe-me saber se estou fazendo isso de uma maneira não óbvia.
Solução
Resolvido através da lista de discussão de usuários web2py.
você também pode usar:onerror = load_import('onerror').onerror
O objeto HTTP não estava disponível no Oneerror.py, então eu fiz A - de Gluon.http Import *
módulos python também são módulos python normais no web2py.Eles só veem palavras -chave do Python, a menos que você as importasse.O Web2py possui 5 objetos especiais (solicitação, resposta, sessão, cache, t) e seu aplicativo possui outros (db, auth, crud).Como eles são instanciados em todas as solicitações, não podem importar pelo módulo, eles precisam ser passados explicitamente para as funções no módulo.Lembre -se de que, embora isso seja estranho, é isso que outras estruturas pedem para fazer o tempo todo para todas as funções.Web2py salva isso para modelos e controladores.
Mas então percebi que o objeto de solicitação também não está disponível para o decorador, como na linha - nome do arquivo = os.path.join (request.Folder, 'Views/erros/erro %i.html' %status) Eu tenho algumas dúvidas - 1.Os módulos no diretório /módulos são carregados automaticamente à medida que uma nova instância do web2py é criada?Se sim, como posso acessá-los?
Não.Eles são módulos python normais.Você tem que importá -los para usá -los.
- Existe uma maneira de passar o objeto de solicitação para este decorador do meu controlador?Dicas são bem-vindas.
Você precisa de um meta decorador def meta_decoration(something):def actual_decorator(f,algo=algo):DO_WHOTE_YOU_WANT () return f () retornar decorador @meta_decorator (request) def function_to_be_decorated ():Retorne dict () de qualquer maneira você não precisa deste decorador.Procure em rotas.examples.py por rotas_onerror.Existe uma maneira simples de fazer o que você deseja.