私は初心者のプログラマーで、Google App Engineとwebapp2などの新機能です。これは非常に基本的な質問かもしれません。Google App Engine(Python)で削除を処理する方法
イメージをBlobStoreに保存するアプリケーションを作成しています。私のモデルは、説明、blob_key、画像のURLと日付を格納します。
私はすべてを保存することができるので、ビットは大丈夫です。
しかし、私はデータストアからアイテムを削除するだけでなく、ブロブストアに保存されたイメージを削除する削除ボタンを作成したいと思います。
私はDeleteHandlerを作成しました.HTMLには、削除するアイテムのキーを渡すフォームがあります。 DeleteHandlerでは、投稿されたキーを使用してアイテムをデータストアから削除しています。私はまた、Blobstoreに保存されたイメージを削除するためにキーを使用しようとしています。
これまではフォームの削除フォームに404が表示されていましたが、それを過ぎてもDeleteHandlerが正しい機能を処理しているかどうかはわかりません。すべてのヘルプははるかに高く評価されるだろう
..
Main.py:
import os
import urllib
import webapp2
from google.appengine.ext.webapp import template
from google.appengine.ext import blobstore
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.api import images
#Models
from google.appengine.ext import db
class ImageItem(db.Model):
description = db.StringProperty(required=True)
img_url = db.StringProperty()
blob_key = blobstore.BlobReferenceProperty()
when = db.DateTimeProperty(auto_now_add=True)
#Handlers (Views)
class MainHandler(webapp2.RequestHandler):
def get(self):
upload_url = blobstore.create_upload_url('/upload')
imgs = db.GqlQuery(
'SELECT * FROM ImageItem '
'ORDER BY when DESC')
imgs_dict = {'imgs': imgs}
self.response.out.write(template.render('main.html',locals()))
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
f = self.get_uploads('file')[0] # 'file' is file upload field in the form
img =ImageItem(description=self.request.get('description'))
img.blob_key = f.key()
img.img_url = images.get_serving_url(f.key())
img.put()
self.redirect('/')
class DeleteHandler(webapp2.RequestHandler):
def post(self):
key = self.request.get('k')
item = db.get(key)
images.delete(item.blob_key)
item.delete()
self.response.out.write(key)
#URL Routing happens here
app = webapp2.WSGIApplication([('/', MainHandler),
('/upload', UploadHandler),
('/delete', DeleteHandler)],
debug=True)
main.htmlと:
<form action="{{upload_url}}" method="POST" enctype="multipart/form-data">
<p>
<label for="file">Upload File</label>
<input type="file" name="file" id="file">
</p>
<p>
<label for="description">Description</label>
<input type="text" id="description" name="description">
</p>
<input type="submit" name="submit" value="Submit">
</form>
<ul>
{% for i in imgs %}
<li>
<img src="{{i.img_url}}=s400-c" alt="">
{{i.description }}
</li>
<li>{{i.when }}</li>
<li>
<form action="/delete" method="POST" enctype="multipart/form-data">
<input type="text" name="k" value="{{i.key}}" />
<input type="submit" value="delete">
</form>
</li>
{% endfor %}
</ul>
感謝。アイテムがブロブストアから削除されていないことを除いて、現在はほとんど動作しています。私はblobstore.delete(item.key)とblobstore.delete([item.key])を試しました。いずれも、そのトリックをしていないようです。 – user791793
あなたの次の記事で、あなたがそれを理解したことが分かります。あなたがうまく働いてうれしい。返信して詳細をお知らせいただきありがとうございます。 –
ありがとうございました。Ericは、あなたの答えを目盛りでマークし、blobstore.delete(KEY)の使用を指摘しているのを見て、 – user791793