个人资料图片消失了。这里的谜 - GAE(Python)

时间:2012-07-22 03:40:33

标签: python google-app-engine web-applications

好的,首先我要通过Python声明这是Google App Engine。

任何人,

这些是我的处理程序/路由问题。请阅读以下内容和具体内容:

class GetImage(MainHandler):
    def get(self):
        img = db.get(self.request.get("entity_id"))
        self.response.out.write(img.image)

class Profile(MainHandler):
    def get(self, profile_name):
        current_user = str(self.user.name)
        profile_name = current_user
        if self.user:
            key='ag5kZXZ-c3VpdGVnYW1lcnINCxIHSW1hZ2VkYhgxDA'
            imgs  = db.GqlQuery("select * from Imagedb WHERE name =:1", current_user)
            for img in imgs:
                key = img.key() # this is the key
            self.render('profile.html', profile_name = self.user.name, current_user = self.user.name, profile_image = key ,username = self.user.name, email = self.user.email, first_name = self.user.first_name, last_name = self.user.last_name, country = self.user.country, prov_state = self.user.prov_state, city_town = self.user.city_town)
        else:
            self.redirect('/register')

class Change_Profile_Image(MainHandler):
    def get(self):
        if self.user:
            self.render('change_profile_image.html', username = self.user.name, firstname=self.user.first_name, current_user = self.user.name)
        else:
            self.render('change_profile_image.html')

    def post(self):
        imagedb = Imagedb(name = self.user.name)
        imageupl = images.resize(self.request.get("img"), 200, 200)
        imagedb.image = db.Blob(imageupl)
        imagedb.put()
        self.redirect('/profile/'+self.user.name)


app = webapp2.WSGIApplication([('/', MainPage),
                               ('/register', Register),
                               ('/article', ArticlePage),
                               ('/profile/([^/]+)', Profile),
                               ('/login', Login),
                               ('/logout', Logout),
                               ('/welcome', Unit3Welcome),
                   ('/games', Games),
                   ('/forum', Forum),
                   ('/media', Media),
                   ('/rank', Rank),
                   ('/review', Reviews),
                   ('/events', Events),
                               ('/alreadyloggedin', AlreadyLoggedIn),
                   ('/change_profile_image', Change_Profile_Image),
                               ('/img', GetImage)],
                              debug=True)

好吧,所以这里的东西变得环绕。如果我将Profile类更改为take-get(self)并从配置文件类的路由中删除我的reg表达式,我的图像可以完美地工作。一旦我路由到唯一的配置文件,即将profile_name传递到配置文件处理程序并将URL映射到该配置文件,我将失去我的GetImage处理程序的所有功能。当我查看源代码时,没有任何改变。图像仍然按照惯例传递到模板中。

有没有人知道这里发生了什么?我真的很感激。非常感谢你提前。希望我的知识能够赶上你们,我很快就会回答你们的问题:p。

1 个答案:

答案 0 :(得分:2)

如果没有看到模板的(简化版),很难回答您的问题。

您的代码中还有一些奇怪的元素,很难说明发生了什么。很难将其格式化为评论,因此我将其作为答案,以便您至少可以看到它。

  • 在您的个人资料处理程序中的get请求中,您尝试在之前获取当前用户,以检查当前用户是否存在。当您将profile_name分配给profile_name时,您也可以完全丢弃current_user元素,这样您就不会在个人资料页面上获得除当前用户之外的任何内容的个人资料图片。

你在这里接受profile_name,但从不使用它:

   def get(self, profile_name):
        current_user = str(self.user.name)
        profile_name = current_user
  • 您循环遍历imgs但每次都更换密钥,这意味着如果您返回的图片超过1张,则无法告知已发生这种情况,并且您会覆盖查询中的最后一张图片。 。你应该做的一件事是添加一个检查,看看imgs是否真的是真的,所以你可以判断你是否有任何结果,可能(虽然我无法想象如何)解释为什么你的图像处理程序失败了。

最后,您可以检查您的来源,以查看模板中实际请求的图像网址。