什么是Tornado与Web.py的ctx模块的对应物?

时间:2014-06-03 18:06:29

标签: python web-services tornado web.py

我想学习如何在龙卷风中使用类似web.py的ctx模块。

谢谢!


编辑: 我试图在全局上下文中保存用户的凭据,就像使用ctx模块一样。我知道这些信息可以随每个请求传递,但在这种情况下,我需要每次都将这些信息传递给处理程序吗?我想知道实现这个目标的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以从RequestHandler.request对象获取ctx中包含的大部分信息,该对象是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.web.authenticated的装饰器,您可以使用它来装饰您希望用户通过身份验证访问的任何方法。您还应该实现get_current_user,这是authenticated装饰器用于确定用户是否经过身份验证的内容,以及get_login_url,它应该返回用户应该重定向到的网址,如果他们'没有登录(通常这应该是您的登录页面)。用户登录后,您可以使用set_secure_cookie将会话存储在安全Cookie中,然后在get_current_user内调用get_secure_cookie以稍后验证会话。

有关使用Tornado处理会话的更多一般信息,请参阅此问题:standard way to handle user session in tornado