2017-01-23 2 views
1

J'ai quelques bits de code que je voudrais exécuter juste avant que toutes les vues soient invoquées, comme la journalisation.Dans Pyramid, existe-t-il une sorte de "hook" qui se produit juste avant qu'une vue ne soit appelée?

Existe-t-il un moyen de faire cela dans Pyramid?

+1

J'ai regardé Voir Derivers, mais vous devez les activer sur une vue de base de vue, ce qui va à l'encontre de mon but de vous connecter automatiquement un message lorsque chaque La vue est invoquée sans avoir à modifier la vue. –

+0

Non true. Un lecteur de vue enveloppe toutes les vues. Ils enveloppent chaque vue individuellement, ce qui leur permet d'accepter les options par vue et évitent même d'envelopper des vues spécifiques, mais cela dépend de leur corps. –

Répondre

2

deux l'interpolation [1] et voir deriver [2] documentation avoir des exemples de code de synchronisation. Cela dépend vraiment de ce que vous voulez mesurer et de l'information que vous voulez mettre à votre disposition lorsque vous faites la mesure. Par exemple, l'interpolation ne sait pas quelle vue a été exécutée, seulement l'URL. Cependant, il englobe plus du pipeline.

[1] http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#creating-a-tween

[2] http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#custom-view-derivers

2

Vous pouvez le faire en vous abonnant à certains événements.

http://docs.pylonsproject.org/projects/pyramid/en/latest/api/events.html

celui que vous voulez est probablement ContextFound.

Vous pouvez vous inscrire soit avec le décorateur (http://docs.pylonsproject.org/projects/pyramid/en/latest/api/events.html#pyramid.events.subscriber):

from pyramid.events import ContextFound 
from pyramid.events import subscriber 

@subscriber(ContextFound) 
def do_something(event): 
    print(event) 
    print(event.request) 

Ou impérieusement avec add_subscriber (http://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html#pyramid.config.Configurator.add_subscriber):

from pyramid.events import ContextFound 

def main(global_config, **settings): 
    # rest of your config here 
    config.add_subscriber(do_something, ContextFound) 

def do_something(event): 
    print(event) 
    print(event.request)