0

我正在 Google App Engine 中使用 webapp2 构建应用程序。如何将用户名传递到 url,以便在单击配置文件按钮时,将用户带到“/profile/username”,其中“username”特定于用户?

我目前的处理程序:

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/signup', Register),
                               ('/login', Login),
                               ('/logout', Logout),
                               ('/profile', Profile)
                               ],
                              debug=True)

配置文件类:

class Profile(BlogHandler):
    def get(self):
        email = self.request.get('email')
        product = self.request.get('product')
        product_list = db.GqlQuery("SELECT * FROM Post ORDER BY created DESC LIMIT 10")
        self.render('profile.html', email = email, product = product, product_list = product_list)

我正在尝试将每个用户发送到个人资料页面,该页面包含我的数据库中特定于他们的信息。谢谢

4

3 回答 3

2

一种可能的解决方案是简单地使用一个 URL,即/profile. 相应的处理程序将使用来自登录用户的数据呈现响应。

如果你真的想拥有这样的 URL /profile/username,你可以定义一个路由

app = webapp2.WSGIApplication([('/', MainPage),
                               ('/signup', Register),
                               ('/login', Login), 
                               ('/logout', Logout),
                               ('r/profile/(\w+)', Profile)
                              ],
                              debug=True)

并访问您的处理程序中的用户名:

class Profile(BlogHandler):
    def get(self, username):

但是根据您的应用程序,您可能希望通过在处理程序中的某处添加检查来确保只有登录用户可以访问它/profile/username

于 2012-07-25T15:46:49.700 回答
0

请参阅http://webapp-improved.appspot.com/guide/routing.html

你可以有类似的东西

class Profile(BlogHandler):
  def get(self, username):
    ...

app = webapp2.WSGIApplication([('/profile/(\w+)', Profile), ...])
于 2012-07-25T15:40:00.967 回答
0

首先将捕获组添加到 /profile:

(r'/profile/(\w+)', Profile)

字符串的r开头很重要,因为它将正确处理正则表达式字符。否则,您必须手动转义黑斜线。

\w+将匹配一个或多个字母数字字符和下划线。这应该足以满足您的用户名,是吗?

然后像这样设置你的 RequestHandler:

class Profile(webapp2.RequestHandler):
    def get(self, username):
        # The value captured in the (\w+) part of the URL will automatically
        # be passed in to the username parameter. 
        # Do the rest of my coding to get and render the data.
于 2012-07-25T15:41:26.960 回答