主干和javascript:在GAE数据存储中上载和存储图像数据?
我一直在尽可能地搜索,但在这个问题上没有得到任何帮助。 我正在开发一个使用python GAE和主干javascript的小程序,我希望用户可以使用下面给出的html表单创建一本新书,并将新书存储在GAE数据存储中,表单包含字符串和图像主干和javascript:在GAE数据存储中上载和存储图像数据?,javascript,python,image,google-app-engine,backbone.js,Javascript,Python,Image,Google App Engine,Backbone.js,我一直在尽可能地搜索,但在这个问题上没有得到任何帮助。 我正在开发一个使用python GAE和主干javascript的小程序,我希望用户可以使用下面给出的html表单创建一本新书,并将新书存储在GAE数据存储中,表单包含字符串和图像 <form> <div><label>Title:</label> <input type="text" id="title" name="book_title" ></div> &
<form>
<div><label>Title:</label> <input type="text" id="title" name="book_title" ></div>
<div><label>Author:</label> <input type="text" id="author" name="book_author" ></div>
<div><label>Picture:</label> <input id="image" type="file" class="upload" name="img" /></div>
<div><img id="img_preview" src="#" alt="image" ></img></div>
<div><button class="create_book">Create Book</button></div>
</form>
在python服务器端:
class Book(db.Model):
title = db.StringProperty()
author = db.StringProperty()
image = db.BlobProperty()
class createBook(webapp.RequestHandler):
def post(self):
book = Book()
book.title = self.request.get("title")
book.author = self.request.get("author")
book.image = db.Blob(self.request.get("image"))
book.put()
......
application = webapp.WSGIApplication(
[
.....
('/books/?',createBook)
],
debug=Ture
)
我只能在页面上显示缩略图以供预览,但无法创建新书,行“app.bookList.create(…)”确实向python服务器端发送POST请求,请求由“createBook”方法处理,但Firebug显示的“self.request.get(“title”/“author”/“image”)”行只是一个空字符串,这意味着无法从Http请求中正确检索表单内容。
你能告诉我代码片段中有什么问题吗?谢谢您的帮助。我认为您的问题可能是您正在将模型传递给
create
。从主干文档:
创建集合。创建(属性,[选项])
方便地在集合中创建模型的新实例
create
不需要模型,因为它创建了一个模型;它期望的是一个原始JSON对象(例如,{foo:bar}
)
*编辑*实际上,这是不正确的,create可以接受(未保存的)模型;把下面几行留在这里,这样就不会太混乱了
您可以通过执行以下操作来解决此问题:
app.bookList.create(this.model.attributes, {wait:true,
或:
但实际上您根本不需要使用create
,因为您不需要创建模型(您已经有了模型)。您(可能)想要做的是将您拥有的模型添加到集合中:
app.bookList.add(this.model)
然后分别与服务器同步:
this.model.save(null, {wait:true,
success:function(){
alert("A new book has been created!");
}
});
在python端,您应该从
self.request.body
不是
您好MachineHost,我已经尝试了您的前两个解决方案,“this.model.attributes”和“this.model.toJSON()”,它们没有任何区别,self.request.get('title')将得到一个空字符串“str:”。但是,行“app.bookList.create(this.model….)”似乎要将新书的属性传递给服务器端:使用表达式进行调试,使用而不是“self.request.get”,但是“self.request.body”将获得“str:{”title:“书名”,“作者”:“作者名”,“图像”:“bookpicture.jpg”},为什么?我刚刚阅读了主干文档,从“create collection.create(attributes,[选项]”,它说“create方法可以接受属性哈希或现有的未保存的模型对象,所以似乎可以将一个未保存的模型对象传递给create方法。您完全正确,create将接受模型!我以前从未这样使用过,但我会相应地编辑我的答案。至于为什么self.request.get没有数据,这是因为你不是在做HTTP get,你是在做POST。谢谢,我实际上看到了这个已回答的问题:,它使用self.request.get作为POST,并且似乎有效?有人能告诉我,这是一个根本没有解决方案的问题,还是我问错了问题?
this.model.save(null, {wait:true,
success:function(){
alert("A new book has been created!");
}
});
self.request.body
self.request.get('xxx')