Подтвердить что ты не робот

Webpy: как установить код состояния http на 300

Возможно, это глупый вопрос, но я не могу понять, как код http-кода в webpy.

В документации я вижу список типов для основных кодов состояния, но существует ли общая функция для установки кода состояния?

Я пытаюсь реализовать сервер unAPI, и ему требуется ответить 300 Multiple Choices на запрос только с идентификатором. Подробнее здесь

Спасибо!

EDIT: я только что обнаружил, что могу установить его через web.ctx делая

web.ctx.status = '300 Multiple Choices'

- это лучшее решение?

4b9b3361

Ответ 1

Способ, которым 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.

См. также источник для web.HTTPError в webapi.py.