2012-01-22 10 views
6

Per un progetto Google Appengine scritto in Python, desidero avere i miei messaggi di errore quando si verifica un errore. Voglio usare le error_handlers come descritto in: http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_ResponsesCome creare pagine di errore personalizzate con app.yaml per Google Appengine Python

Nella domanda che uso webapp con debug = False

Quando creo un errore nel mio codice, ottengo lo standard errore 500 del server messaggio dal browser .

ho creato una pagina di errore personalizzata denominata default_error.html

La domanda è: Dove salvare questa pagina di errore personalizzata?

BTW Questo è il mio codice app.yaml:

application: customerrorpage 
version: 1 
runtime: python 
api_version: 1 


error_handlers: 
- file: default_error.html 

handlers: 
- url: /good.htm 
    static_files: static/good.htm 
    upload: static/good.htm 

- url:/
    static_files: static/good.htm 
    upload: static/good.htm 

- url: /.* 
    script: main.py 

risposta

0

Un modo per avvicinarsi a questo è quello di definire una classe 'BaseRequestHandler', da cui sono sottoclassi tuoi gestori delle richieste. La classe BaseRequestHandler può eseguire l'override del metodo handle_exception() (vedere http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_handle_exception) per eseguire il rendering di una pagina di errore.

+0

Qual è la relazione tra la classe 'BaseRequestHandler' e l'uso di app.yaml? – Hans

4

Definizione di una 404 personalizzata con solo la parte python funziona per me:

app.error_handlers[404] = handle_404

def handle_404(request, response, exception): 
    c = {'exception': exception.status} 
    t = jinja2.get_jinja2(app=app).render_template('404.html', **c) 
    response.write(t) 
    response.set_status(exception.status_int) 

Questo ti dà un maggiore controllo sui messaggi di errore e altre dinamiche che si potrebbe desiderare di visualizzare.

+2

Grazie per il suggerimento. Tuttavia non è necessario definire una pagina di errore 404 personalizzata. Accetterò semplicemente tutti gli input e le risposte a ciò in modo pulito. Questa è la teoria. In pratica avrei potuto commettere un errore di programma, a causa del fatto che non ho provato abbastanza, o il progetto è diventato così popolare che si verifica un errore di eccesso di quantità. La mia ipotesi era che tutti gli errori del server (un errore di 500) e tutti gli altri errori specifici del server Appengine come over_quota sono personalizzabili con app.yaml. Quindi la domanda è quando voglio usare yaml.app per gestire questo tipo di errori, dove posso salvare la mia error_page personalizzata? – Hans

+1

Questo suggerimento mi ha insegnato che probabilmente hai usato webapp2 – Hans

0

In parte trovato come funziona. Grazie a tutti per le vostre risposte.

Il percorso del file HTM potrebbe trovarsi nel core o in una directory separata. Se questo è il caso, ad esempio uso il seguente codice nel file app.yaml:

error_handlers: 
- file: error_handlers/default_error.html 

L'da visualizzare file html dovrebbe ora essere collocato nella directory error_handlers

Quando si importa un modulo non esistente in main .py viene mostrata la pagina sopra.

Per recuperare un errore 500 Ho usato webapp2 per mostrare una pagina di errore personalizzata. Questa pagina viene sempre mostrata quando si verifica un errore. Anche quando c'è un errore di eccesso di quantità e app.yaml è configurato correttamente. Ho rimosso anche webapp2 e ho usato di nuovo webapp. Ora non viene visualizzata nessuna pagina.

Ho un'altra app che è attualmente over_quote. Come visualizzare la pagina html over_quota? E 'un errore?

+0

Puoi aggiungere un filtro alla tua proprietà error_handlers. Sopra quota è come, "- error_code: over_quota". Puoi aggiungere singoli filtri per quota, protezione DoS e timeout: https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Custom_error_responses – Greg

Problemi correlati