Что такое Tornado аналог модуля ctx Web.py?

Я хотел бы узнать, как использовать что-то вроде модуля ctx web.py в торнадо.

Спасибо!


Изменить: я пытаюсь сохранить учетные данные пользователя в глобальном контексте, например, с модулем ctx. Я знаю, что такую ​​информацию можно передавать с каждым запросом, но в таком случае мне нужно будет каждый раз передавать эту информацию обработчикам? Интересно, как правильно это сделать?


person Hypnos    schedule 03.06.2014    source источник


Ответы (1)


Вы можете получить большую часть информации, содержащейся в ctx, из RequestHandler.request объект, который представляет собой tornado.httpserver.HTTPRequest экземпляр.

class MyHandler(tornado.web.RequestHandler):
    def get(self):
         # This is just some of the attributes available.
         print("host is {0.host}, ip is {0.ip}, HTTP method"
               " is {0.method}, protocol is {0.protocol}".format(self.request))

Кое-что из того, что содержится в ctx, вам, возможно, придется вытащить из self.request.headers, но я думаю, что все там есть.

Tornado не предоставляет ничего эквивалентного данным сеанса, которые предоставляет ctx. Tornado предназначен для безгражданства, поэтому это намеренно не реализовано.

Обратите внимание, что Tornado предоставляет несколько полезных методов для аутентификации. Одним из них является декоратор под названием tornado.web.authenticated, который вы можете используйте, чтобы украсить любой метод, к которому вы хотите, чтобы пользователь аутентифицировал доступ. Вы также должны реализовать get_current_user, который декоратор authenticated использует для определения того, аутентифицирован ли пользователь, и get_login_url, который должен возвращать URL-адрес, на который следует перенаправить пользователя, если он не вошел в систему (обычно это должна быть ваша страница входа). Когда пользователь входит в систему, вы можете использовать set_secure_cookie для сохранения своего сеанса в безопасном файле cookie, а затем вызовите get_secure_cookie внутри get_current_user, чтобы проверить сеанс позже.

См. этот вопрос для получения более общей информации об обработке сеансов с Tornado: стандартный способ обработки сеанса пользователя в tornado

person dano    schedule 03.06.2014
comment
Спасибо! Я имел в виду сохранить учетные данные пользователя в глобальной среде, поэтому в этом случае мне нужно передавать учетные данные с каждым отдельным вызовом функции? Интересно, как правильно это сделать? - person Hypnos; 04.06.2014