2011-01-25 29 views
17

Tal vez es una pregunta estúpida, pero no puedo averiguar cómo un código de estado http en webpy.Webpy: cómo configurar el código de estado http a 300

En la documentación puedo ver una lista de tipos para los principales códigos de estado, pero ¿hay una función genérica para establecer el código de estado?

Estoy tratando de implementar un servidor unAPI y es necesario responder con un 300 Multiple Choices a una solicitud con solo un identificador. Más información here

¡Gracias!

EDIT: acabo de descubrir que puedo configurarlo a través web.ctx haciendo

web.ctx.status = '300 Multiple Choices'

es esta la mejor solución?

Respuesta

18

La forma en que web.py hace esto para 301 y otros tipos de redirección es mediante la subclasificación de web.HTTPError (que a su vez establece web.ctx.status). Por ejemplo:

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) 

A continuación, a la salida de este código de estado que raise MultipleChoices en el controlador:

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

lo necesitará de ajuste para su aplicación UNAPI en particular, por supuesto.

Véase también the source for web.HTTPError in webapi.py.

+0

este método también hace el trabajo para 304 No modificado en caso de que sirva alguna imagen mediante programación –

Cuestiones relacionadas