Webpy: как установить код состояния http на 300 - PullRequest
16 голосов
/ 25 января 2011

Может быть, это глупый вопрос, но я не могу понять, как получить код состояния http в webpy.

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

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

Спасибо!

РЕДАКТИРОВАТЬ: Я только что обнаружил, что я могу установить его через web.ctx, делая

web.ctx.status = '300 Multiple Choices'

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

1 Ответ

17 голосов
/ 25 января 2011

То, как 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 .

...