2015-01-12 11 views
7

Tutto, sto tentando di generare un errore personalizzato usando Flask-Restful, dopo the docs. A scopo di test, ho definito e registrato il dizionario degli errori esattamente nel link nei documenti: api = flask_restful.Api(app, errors=errors).Sollevamento di un errore personalizzato con Flask-Restful

Tuttavia, quando ho voglia di alzare l'errore personalizzato utilizzando (per esempio) abort(409) all'interno del modulo di risorse, i rapporti Firebug:

{ "message": "Conflict", "status": 409 }

Questo mi sembra lo standard 409 errore, niente di personalizzato; dai documenti, mi aspetterei il messaggio di errore personalizzato: "Esiste già un utente con questo nome utente".

Penso che mi manchi qualcosa riguardo all'innalzamento dell'errore stesso. Dovrei usare la chiave del dizionario in qualche modo? Riesaminare il codice sorgente di Flask-Restful non ha aiutato, anche se ho provato.

+2

Lo stesso qui. Se ho definito 3 errori diversi per 400, come posso aumentare tali errori? Nel documento dice che salva prova e cattura in funzione API, ma non vedo un modo chiaro come ciò può essere fatto. – esdotzed

risposta

12

Per definire un messaggio per un codice di stato HTTP standard con Flask-RESTful, è necessario ridefinire una delle eccezioni HTTP forniti da Werkzeug, su cui si basa Flask.

In seguito alla vostra domanda, ecco un esempio per ignorare il Conflict exception:

errors = { 
    'Conflict': { 
     'message': "A user with that username already exists.", 
     'status': 409, 
    }, 
} 

app = Flask(__name__) 
api = flask_restful.Api(app, errors=errors) 

Quindi, ogni volta che si chiamerà abort(409), questo tornerà una rappresentazione nel MediaType destra, e con il messaggio definito.

Tuttavia, utilizzando questo metodo, in qualsiasi posizione si annulla con un codice di stato 409, questo restituirà un messaggio relativo a un utente con un nome utente già esistente. È improbabile ciò che si desidera quando si chiama abort(409) in una vista che si occupa di altre risorse rispetto agli utenti.

Quindi, vi consiglio di utilizzare semplicemente il metodo Flask-RESTfulabort come segue, ogni volta che si desidera fornire un messaggio personalizzato:

from flask.ext.restful import abort 

abort(409, description="A user with that username already exists.") 

In generale, estendendo Flask-RESTful definendo i messaggi di errore personalizzati sono utili quando si generano eccezioni personalizzate (con , non abort()) che non sono nello HTTP exceptions fornito da Werkzeug.

+1

Ho un sacco di problemi con quanto sopra: *** TypeError: abort() richiede esattamente 1 argomento (2 dato) – Kelvin

+0

@Kelvin assicurati di importare l'abort dal pallone e non da flask_restful. Questa è stata la ragione per cui ho ricevuto questo errore. – herrherr

Problemi correlati