Domanda

In web2py, c'è un modo per avere un pezzo di codice comune essere eseguito prima di tutti i controllori sono chiamati?

Per esempio, voglio aggiungere un codice che registrerà IP client a un registro di richieste per consentire l'analisi. Potrei semplicemente fare la prima linea di tutti i miei controllori essere qualcosa di simile response = RequestBase(request) ma io sono curioso di sapere se questo è un problema che è già stato risolto attraverso alcuni altri meccanismi.

È stato utile?

Soluzione

Si potrebbe semplicemente mettere il vostro pezzo di codice di registrazione nel file di definizione del modello, models/db.py, o nella vostra controllers/default.py controllore in questo modo:

with open("mylog.log", "at") as f:
    f.write(repr(request))

def index():
    # index controller definition

# ... rest of the code

o, se avete bisogno di funzioni o classi da definire:

# --------------------------
# Log part:
# --------------------------

def my_log(request):
    with open("mylog.log", "at") as f:
        f.write(repr(request))

my_log(request)

# --------------------------
# Controllers part:
# --------------------------

def index():
    # index controller definition

# ... rest of the code

Naturalmente, repr(request) non è come si vuole, ma si ottiene l'idea:. Da lì è possibile accedere tutte le informazioni che ti piace prima che i controllori sono chiamati (sono appena definiti in questa fase)

Il server mantiene già un registro nella directory principale, in httpserver.log.

Altri suggerimenti

Inserire il codice in un file di modello e otterrà eseguito prima di qualsiasi controller. Se si desidera solo il codice da eseguire per un controller specifico, posizionarlo in cima il controller prima di qualsiasi funzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top