Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主干和javascript:在GAE数据存储中上载和存储图像数据?_Javascript_Python_Image_Google App Engine_Backbone.js - Fatal编程技术网

主干和javascript:在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> &

我一直在尽可能地搜索,但在这个问题上没有得到任何帮助。 我正在开发一个使用python GAE和主干javascript的小程序,我希望用户可以使用下面给出的html表单创建一本新书,并将新书存储在GAE数据存储中,表单包含字符串和图像

<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')