2011-01-25 13 views
17

Forse è una domanda stupida, ma non riesco a capire come un codice di stato http in webpy.Webpy: come impostare il codice di stato http su 300

Nella documentazione è possibile visualizzare un elenco di tipi per i codici di stato principali, ma esiste una funzione generica per impostare il codice di stato?

Sto cercando di implementare un server unAPI ed è necessario per rispondere con un 300 Multiple Choices a una richiesta con solo un identificatore. Maggiori informazioni here

Grazie!

EDIT: Ho appena scoperto che posso impostare attraverso web.ctx facendo

web.ctx.status = '300 Multiple Choices'

è questa la soluzione migliore?

risposta

18

Il modo in cui web.py fa questo per 301 e altri tipi di reindirizzamento è la sottoclasse web.HTTPError (che a sua volta imposta web.ctx.status). Per esempio:

class MultipleChoices(web.HTTPError): 
    def __init__(self, choices): 
     status = '300 Multiple Choices' 
     headers = {'Content-Type': 'text/html'} 
     data = '<h1>Multiple Choices</h1>\n<ul>\n' 
     data += ''.join('<li><a href="{0}">{0}</a></li>\n'.format(c) 
         for c in choices) 
     data += '</ul>' 
     web.HTTPError.__init__(self, status, headers, data) 

Poi all'uscita questo codice di stato si raise MultipleChoices nel gestore:

class MyHandler: 
    def GET(self): 
     raise MultipleChoices(['http://example.com/', 'http://www.google.com/']) 

Si avrà bisogno di sintonia per una particolare applicazione unAPI, naturalmente.

Vedere anche the source for web.HTTPError in webapi.py.

+0

questo metodo esegue anche il lavoro per 304 Not Modified nel caso in cui vengano pubblicate alcune immagini a livello di codice –

Problemi correlati