我在Google App Engine中有一个Python脚本,它只向用户提供一条简单的欢迎消息。如果用户登录Google,则会显示个性化的欢迎消息,其中包含以下代码:
if users.get_current_user():
self.response.out.write('Welcome ' + users.get_current_user()')
我想要做的是,如果用户尚未登录,请按一个可以将其重定向到Google登录页面以登录其帐户的按钮。
else:
#redirect user to login page here
我已经尝试过一些方法来做到这一点,但它们中没有一个会起作用。我试过了:
self.response.out.write('<form action="%s">
<input type="submit" value="Login to Google"></form>
' % users.create_login_url('/')
当按下按钮时没有任何反应,所以我尝试了:
self.response.out.write('<form action="%s">
<input type="submit" value="Login to Google"></form>
' % self.redirect(users.create_login_url('/'))
这只是在访问主页面时将用户重定向到登录页面。
按下按钮后,有没有办法将用户重定向到Google登录页面?
答案 0 :(得分:2)
您缺少的是检查网址并重定向用户的处理程序:
因此,对于表单操作,您必须将其更改为:
signin_page = "/signin/"
self.response.write('<form action="%s">
<input type="submit" value="Login to Google"></form>'
% signin_page)
然后在处理程序中:
class SignInHandler(webapp2.RequestHandler):
def get(self):
self.redirect(users.create_login_url(self.request.uri))
最后:
application = webapp2.WSGIApplication([('/', IndexPageHandler),
('/signin/', SignInHandler),],)
答案 1 :(得分:1)
我不确定究竟什么不起作用 - 在第三个代码块的末尾只缺少一个括号。以下是适用于您的示例的完整代码:
import webapp2
from google.appengine.api import users
class MainHandler(webapp2.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
msg = ("Welcome, %s! (<a href=\"%s\">sign out</a>)" %
(user.nickname(), users.create_logout_url("/")))
else:
msg = ("<form action=\"%s\">"
"<input type=\"submit\" value=\"Login to Google\">"
"</form>" %
users.create_login_url("/"))
self.response.out.write("<html><body>%s</body></html>" % msg)
app = webapp2.WSGIApplication([('/', MainHandler)], debug=True)
注意:此处使用的表单实际上并不是表单,因为没有任何字段需要填写。请考虑使用样式为按钮的链接。可以找到一个示例here。