Как настроить пользовательские заголовки для ответов об ошибках с сервера Twisted? - PullRequest
0 голосов
/ 29 января 2019

В частности, я хочу добавить заголовки CORS для 4xx и 5xx, чтобы мое веб-приложение внешнего интерфейса могло отображать пользователю информацию об ошибке.

В моем приложении у меня есть ресурс root, и я использую putChildдобавить листовые ресурсы.Например:

root = Root()
proxy = Proxy()
root.putChild("".encode('utf-8'), Root())
root.putChild("proxy".encode('utf-8'), proxy)
proxy.putChild("listMonitors".encode('utf-8'), ListMonitors())
proxy.putChild("getMonitorValues".encode('utf-8'), GetMonitorValues())
proxy.putChild("setStartInstrument".encode('utf-8'), SetStartInstrument())
proxy.putChild("setStopInstrument".encode('utf-8'), SetStopInstrument())
proxy.putChild("setPowerOnInstrument".encode('utf-8'), SetPowerOnInstrument())
proxy.putChild("setPowerOffInstrument".encode('utf-8'), SetPowerOffInstrument())

site = server.Site(root)

Это кажется уместным из документации Twisted и может позволить установить заголовки в ответе, но я не уверен, как его применить.Нужно ли мне отказаться от метода putChild и вместо этого перейти к прямому трафику моего ресурса root на все мои конечные ресурсы или noresource для ошибки 404?А как насчет других типов ошибок?

ОБНОВЛЕНИЕ:

Комментатор запросил информацию о том, что Root:

class Root(resource.Resource):
    isLeaf = False

    def render_GET(self, request):

        request.setHeader('Access-Control-Allow-Origin', '*')
        return "arkanoid?".encode()

1 Ответ

0 голосов
/ 30 января 2019

Twisted Web не дает возможности определять поведение обработки ошибок на уровне сайта.Он позволяет вам определять поведение 403 и 404 для статического контента на основе файловой системы, обслуживаемого с использованием twisted.web.static.File, но, похоже, это не поможет в вашей ситуации.

Самым простым решением, вероятно, является использование Klein , чтобы определить ваше поведение в Интернете.Klein обеспечивает поведение при настройке ошибок , которое вас интересует. Поскольку Klein основан на Twisted и хорошо работает с Twisted Web, вы можете переключать на него столько же или меньше своих веб-приложений, как и вы.Лайк будет продолжать использовать Twisted Web для отдыха.Все остальные инструменты и библиотеки Twisted также будут работать вместе с ним.

...