Webpy:如何设置HTTP状态码为300

16 投票
1 回答
6320 浏览
提问于 2025-04-16 10:36

也许这个问题有点傻,但我就是搞不懂怎么在webpy里设置HTTP状态码。

在文档里我看到了一些主要状态码的类型列表,但有没有一个通用的函数可以用来设置状态码呢?

我正在尝试实现一个unAPI服务器,要求在收到只有一个标识符的请求时,回复300 Multiple Choices。更多信息可以在这里找到。

谢谢!

编辑:我刚发现可以通过web.ctx来设置,方法是:

web.ctx.status = '300 Multiple Choices'

这样做算是最好的解决方案吗?

1 个回答

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)

然后在你的处理函数中,你可以用raise MultipleChoices来输出这个状态码:

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

当然,这需要根据你具体的unAPI应用进行调整。

你还可以查看webapi.py中web.HTTPError的源代码

撰写回答