将用户名添加到URL的路径

时间:2012-07-25 15:32:29

标签: python google-app-engine handler

我正在使用Google App Engine中的webapp2构建应用程序。如何将用户名传递到网址,以便在点击个人资料按钮时,用户需要“/ profile / username”,其中“username”是特定于用户的?

我目前的处理程序:

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

Profile类:

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)

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

3 个答案:

答案 0 :(得分:2)

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

如果您真的想拥有/profile/username这样的网址,可以定义一个route

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

答案 1 :(得分:0)

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

你可以拥有像

这样的东西
class Profile(BlogHandler):
  def get(self, username):
    ...

app = webapp2.WSGIApplication([('/profile/(\w+)', Profile), ...])

答案 2 :(得分: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.