3

blob およびその他のフィールドに関する情報をモデル レコードに保存しながら、ファイルを blobstore にアップロードするための最適なワークフローは何ですか?

たとえば、フォームをブロブストアのアップロード URL (blobstore.create_upload_url) に送信し、フォームをクリーンアップし、エラーが発生した場合はリダイレクトし、そうでない場合は保存してリダイレクトする必要がありますか?

エラーを返す最良の方法は何ですか? 変数を取得しますか? モデルを使用してフォームエラーを保存し、フォームエラーモデルインスタンスに基づいてリダイレクトしようとしましたが、面倒でした。何か案は?

4

1 に答える 1

0

これのために私が思いついた解決策は、最も美しいものではありませんが、それは仕事を成し遂げます。アップロードビュー(create_upload_url関数で指定されたビュー)で、最初のページから同じフォームクラスにpost変数を渡します。フォームが有効な場合は、変数をBlobInfo.keyとともにモデルに保存しています。有効なフォームでない場合は、エラーをmemcacheに保存し、ビューをトリガーしてmemcacheからエラーを取得し、フォームインスタンスに追加するerror変数を使用して最初のページにリダイレクトします。

繰り返しになりますが、手順は次のとおりです。

  1. フォームビューを作成する
  2. 最初のビューから同じ形式のPOST変数を確認します
  3. フォームが有効な場合はBlobInfo.keyと一緒に保存し、そうでない場合はエラーを短いライフスパンでmemcacheに保存し、URLにmemcacheキーを使用して最初のビューにリダイレクトします
  4. memcacheからフォームエラーを取得し、それらを新しいフォームインスタンスに追加します
  5. エラーを修正してフォームを再送信し、保存します
于 2011-01-23T18:52:54.370 に答える