Google App Engine重定向到用户登录按钮单击

时间:2012-12-01 07:48:07

标签: python html google-app-engine redirect hyperlink

我在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登录页面?

2 个答案:

答案 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