所以我正在关注Google App Engine的Python图像教程,并且我收到错误:"引发ValueError('名称%r不能包含句点字符'% (名称))"
我试图将图片保存为模型的一部分。我认为这与我如何保存上传的图像有关。我在我的Model类中使用了ndb.BlobProperty()。这是代码。
class Greeting(ndb.Model):
"""A main model for representing an individual Guestbook entry."""
author = ndb.StructuredProperty(Author)
content = ndb.StringProperty(indexed=False)
avatar = ndb.BlobProperty()
date = ndb.DateTimeProperty(auto_now_add=True)
然后我尝试通过制作模型并使用.put()来添加模型。我不确定语法是否适合设置属性。这是我在post(self)方法中处理器类中的内容。
greeting = Greeting(parent=guestbook_key(guestbook_name))
greeting.content = self.request.get('content')
avatar = images.resize(self.request.get('img'), 32, 32)
greeting.avatar = ndb.BlobProperty(avatar)
greeting.put()
对不起,这是堆栈跟踪
答案 0 :(得分:3)
在我看来,您没有正确检索图像数据,而不是:
avatar = images.resize(self.request.get('img'), 32, 32)
试试这个:
avatar = images.resize(self.request.POST['img'].value, 32, 32)
这是because:
上传的文件直接在request.POST中以cgi.FieldStorage(请参阅cgi模块)实例的形式提供。
所以这样,你也可以得到这样的文件名:
self.request.POST['img'].filename
<强>更新强>
正如@Greg提到的那样,使用BlobProperty
是您的直接问题,因此您需要更改所有内容:
avatar = images.resize(self.request.get('img'), 32, 32)
greeting.avatar = ndb.BlobProperty(avatar)
为此:
greeting.avatar = images.resize(self.request.POST['img'].value, 32, 32)
答案 1 :(得分:1)
您不应该使用BlobProperty来设置模型上的值 - 您应该将值设置为字符串:而不是
greeting.avatar = ndb.BlobProperty(avatar)
尝试:
greeting.avatar = avatar