Xaip
@Xaip

Почему tornado блокирует заголовки?

Нужно в headers прокинуть Authorization с определенным ключем. Если задавать заголовки напрямую через методы options и set_default_headers то все ок. Но в коде более 100 хендлеров и на каждый вешать свой options не комильфо.
Вот так работает
class LongPollingHandler(tornado.web.RequestHandler):

    def set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "*")

    def options(self, *args, **kwargs):
        self.set_header("Access-Control-Allow-Headers", "*")
        self.set_header('Access-Control-Allow-Methods', '*')


    async def get(self):
        pass


Но не работает если наследоваться через класс Mixin:
class BaseHandler(tornado.web.RequestHandler):

    def set_default_headers(self):
        self.set_header("Access-Control-Allow-Origin", "*")


    def options(self, *args, **kwargs):
        self.set_header("Access-Control-Allow-Headers", "*")
        self.set_header('Access-Control-Allow-Methods', '*')

    def prepare(self):
        if db.is_closed():
            db.connect()
        return super(BaseHandler, self).prepare()

    def on_finish(self):
        if not db.is_closed():
            db.close()
        return super(BaseHandler, self).on_finish()

class LongPollingHandler(BaseHandler):
    pass

Почему?
  • Вопрос задан
  • 423 просмотра
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Tornado
Седой и строгий
class BaseHandler(tornado.web.RequestHandler):
    def set_default_headers(self):
        self.set_header('Access-Control-Allow-Origin', '*')

    def options(self, *args, **kwargs):
        self.set_header('Access-Control-Allow-Headers', '*')
        self.set_header('Access-Control-Allow-Methods', '*')
        self.set_status(204)
        self.finish()


class LongPollingHandler(BaseHandler):
    def get(self, status):
        self.write('{"data": "Hello"}')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы