Algumas dúvidas sobre implementação de páginas de erro customizadas no Web2Py

StackOverflow https://stackoverflow.com/questions/2391297

  •  25-09-2019
  •  | 
  •  

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 -

  1. O diretório /modules é um bom lugar para manter esse componente reutilizável?

  2. 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?

  3. 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.

Foi útil?

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.

  1. 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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top