Webpy:如何将http状态代码设置为300

Gio*_*lia 16 python http-status-codes web.py http-headers

也许这是一个愚蠢的问题,但我无法弄清楚如何在webpy中使用http状态代码.

在文档中,我可以看到主状态代码的类型列表,但是有一个通用函数来设置状态代码吗?

我正在尝试实现一个unAPI服务器,它需要回复一个300 Multiple Choices只有一个标识符的请求.更多信息在这里

谢谢!

编辑:我刚刚发现我可以通过web.ctx这样做来设置它

web.ctx.status = '300 Multiple Choices'

这是最好的解决方案吗?

Ben*_*oyt 17

web.py为301和其他重定向类型执行此操作的方式是通过子类化web.HTTPError(依次设置web.ctx.status).例如:

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)
Run Code Online (Sandbox Code Playgroud)

然后raise MultipleChoices在您的处理程序中输出此状态代码:

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

当然,它需要针对您的特定unAPI应用程序进行调整.

另请参阅webapi.py中的源代码web.HTTPError.