0

可能な限り検索してきましたが、この質問についてはまったく助けになりませんでした。バックボーンjavascriptでpython GAEを使用して小さなプログラムに取り組んでいます.ユーザーが以下の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>

ローカル ファイル システムからブックの画像を選択することは、プレビュー用にページにサムネイル画像を読み込むために、displayPicture メソッドによって処理されます。

「Create Book」ボタンのクリックイベントは、javascript ファイルの createBook メソッドによって処理されます。

event:{
    "click .create_book": "createBook" ,
    "change .upload": "displayPicture",
     ......
},
createBook:function(){
    this.model.set({
         title: $('#title').val(),
         author: $('#author').val(),
         image: this.pictureFile.name
    });
    ......
    app.bookList.create(this.model,{wait:true,
          success:function(){
                alert("A new book has been created!");
          }
    });
    return false;
  },  
    ......
    displayPicture: function(evt){
          var files = evt.target.files;
          if(files){
              this.pictureFile = files[0];
              var reader = new FileReader();
              reader.onloadend = function(){
                   $('#img_preview').attr('src',reader.result).width(200).height(200);
              };
              reader.readAsDataURL(this.pictureFile);
     },
     ..........

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(...)」という行がPOSTリクエストをpythonサーバー側に送信し、リクエストは「createBook」メソッドによって処理されますが、Firebug は「self.request.get("title"/"author"/"image")」行が空の文字列であることを示しています。これは、フォームのコンテンツがから取得されないことを意味します。 Http リクエストを適切に。私のコード スニペットの問題点を教えてください。ご協力いただきありがとうございます。

4

2 に答える 2

1

あなたの問題は、モデルを に渡している可能性が高いと思いますcreate。バックボーンのドキュメントから:

create collection.create(attributes, [オプション])

コレクション内でモデルの新しいインスタンスを作成する便利さ。

createモデルを作成するため、モデルを期待していません。期待しているのは、生の JSON オブジェクト (例: {foo: bar}) です。

*編集*実際、それは正しくありません。create は (保存されていない) モデルを受け入れることができます。あまり混乱しないように、次の数行はここに残しておきます。

これを修正するには、次のようにします。

app.bookList.create(this.model.attributes, {wait:true,

また:

app.bookList.create(this.model.toJSON(), {wait:true,

しかし、実際にはcreateモデルを作成する必要がないため (すでにモデルを持っています)、まったく使用する必要はありません。あなたが(おそらく)やりたいことはadd、コレクションに持っているモデルです:

app.bookList.add(this.model)

次に、サーバーと個別に同期します。

this.model.save(null, {wait:true,
      success:function(){
            alert("A new book has been created!");
      }
});
于 2013-04-14T19:40:42.013 に答える
0

Python側では、データを取得する必要があります

self.request.body

いいえ

self.request.get('xxx')
于 2013-05-17T03:58:56.983 に答える