使用gae python使用装饰器进行必要的登录。传递参数?

时间:2013-01-26 08:26:08

标签: python google-app-engine

我正在尝试使用python gae创建一个必需的登录装饰器。

import utils

def login_required(func):
    def check_login(self, *args, **kw):
        user_cookie = self.request.cookies.get("username")
        user_logged_in = False
        if user_cookie and utils.check_user_login("username"):
            username = user_cookie.split('|')[0]
            user_logged_in = True
            return func(self, *args, **kw)
        else:
            self.redirect('/login') 

    return check_login

class Handler(webapp2.RequestHandler):
    @login_required
    def render_with_login(self, template, template_values={}):
        self.render(template, template_values)

我想将值与设计器中的username和user_logged_in一样传递给模板。有可能这样做吗?是的,我应该如何修改上面的代码?提前致谢。

1 个答案:

答案 0 :(得分:2)

我相信你遇到的问题是可变范围。 user_logged_in和username是check_login的本地用户,并在返回之后执行的新render_with_login函数之前执行。

我认为您最好的选择可能是将您的用户名和user_logged_in作为关键字args传递给您的render_with_login函数,方法是更改​​:

    return func(self, *args, **kwargs)

    return func(self, username=username, user_logged_in=user_logged_in, *args, **kwargs)

顺便说一句,我不是蟒蛇专家所以我对这个范围部分并不积极,但这是我最好的猜测。无论如何都很容易测试。