如何检查用户'龙卷风对象中的饼干?

时间:2017-12-10 14:18:08

标签: python oop cookies tornado

我正在使用带有python语言的tornado web框架。 我想创建一个以示例

命名的父类
class parentClass(tornado.web.RequestHandler):
def get(self):
    cookie = self.get_cookie("cookie")

之后我想创建子课程,例如

class childClass(parentClass):
self.write("you have permission")

如何检查是否允许用户在父类中使用该网站?如何从父类控制子类?

1 个答案:

答案 0 :(得分:1)

如果您的用例是用户身份验证,则在龙卷风中使用@tornado.web.authenticated装饰器在处理程序中具有安全访问权限的任何方法上完美处理。 这将调用您可以在Baseclass中实现的处理程序的get_current_user方法(在您的示例中将是您的ParentClass)

有关更多信息和工作代码,请参阅以下摘录,我摘自tornado documentation

用户身份验证

  

当前经过身份验证的用户在每个请求处理程序中都可用   as self.current_user,每个模板中都有current_user。通过   default,current_user为None。

     

要在您的应用程序中实现用户身份验证,您需要   覆盖请求处理程序中的get_current_user()方法   基于例如cookie的值确定当前用户。这里   是一个允许用户简单地登录应用程序的示例   指定昵称,然后将其保存在cookie中:

class BaseHandler(tornado.web.RequestHandler):
    def get_current_user(self):
        return self.get_secure_cookie("user")

class MainHandler(BaseHandler):
    def get(self):
        if not self.current_user:
            self.redirect("/login")
            return
        name = tornado.escape.xhtml_escape(self.current_user)
        self.write("Hello, " + name)

class LoginHandler(BaseHandler):
    def get(self):
        self.write('<html><body><form action="/login" method="post">'
                   'Name: <input type="text" name="name">'
                   '<input type="submit" value="Sign in">'
                   '</form></body></html>')

    def post(self):
        self.set_secure_cookie("user", self.get_argument("name"))
        self.redirect("/")

application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/login", LoginHandler),
], cookie_secret="__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__")
  

您可以要求用户使用Python装饰器登录   tornado.web.authenticated。如果请求转到具有此方法的方法   装饰者,并且用户未登录,他们将被重定向到   login_url(另一个应用程序设置)。上面的例子可能是   重写:

class MainHandler(BaseHandler):
    @tornado.web.authenticated
    def get(self):
        name = tornado.escape.xhtml_escape(self.current_user)
        self.write("Hello, " + name)

settings = {
    "cookie_secret": "__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
    "login_url": "/login",
}
application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/login", LoginHandler),
], **settings)