我有一个App Engine项目,我在该数据存储区中存储用户的电子邮件地址和该用户的特定重定向URL。
我想要做的是根据登录用户设置登录的重定向目的地。
q = Photos.all()
q.filter("email =", users.get_current_user().email())
q = db.GqlQuery("SELECT * FROM Photos " +
"WHERE email = :1 ", users.get_current_user().email())
for p in q.run():
变量p.redirect
然后为我提供了我希望特定用户重定向到的URL。
以下是我尝试过但显然无效,因为用户尚未登录,因此我收到以下错误AttributeError: 'NoneType' object has no attribute 'email'
user = users.get_current_user()
if user:
# User is signed in
else:
# User is not signed in
q = Photos.all()
q.filter("email =", users.get_current_user().email())
q = db.GqlQuery("SELECT * FROM Photos " +
"WHERE email = :1 ", users.get_current_user().email())
for p in q.run():
url = users.create_login_url(p.redirect)
template_values = {
'url': url,
}
任何帮助将不胜感激。我一直在使用Python& App Engine几天,所以我可能会遗漏一些非常明显的东西。
答案 0 :(得分:1)
将您的资源(例如:/ photos)标记为登录:app.yaml中需要。然后,Appengine会将用户重定向到登录页面,一旦完成登录,将返回到您的资源(/照片),届时您将收到当前用户的电子邮件。
答案 1 :(得分:0)
我通过添加新的重定向处理程序解决了这个问题,因此登录重定向现在是url = users.create_login_url('/authorise')
在/authorise
内,我运行GQL查询并将用户传递到目的地。
虽然我有兴趣知道是否有更有效的方法,但它仍然有效。
答案 2 :(得分:0)
您的if
声明是倒退的:
if user:
# User is signed in
q = Photos.all()
q.filter("email =", users.get_current_user().email())
q = db.GqlQuery("SELECT * FROM Photos " +
"WHERE email = :1 ", users.get_current_user().email())
for p in q.run():
url = users.create_login_url(p.redirect)
else:
# User is not signed in