我正在尝试使用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一样传递给模板。有可能这样做吗?是的,我应该如何修改上面的代码?提前致谢。
答案 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)
顺便说一句,我不是蟒蛇专家所以我对这个范围部分并不积极,但这是我最好的猜测。无论如何都很容易测试。