Tôi là lập trình viên mới và mới sử dụng Google App Engine và webapp2, v.v. Vì vậy, đây có thể là một câu hỏi rất cơ bản.Cách xử lý xóa trong Google App Engine (Python)
Tôi đang tạo một ứng dụng để lưu trữ hình ảnh vào BlobStore. Mô hình của tôi lưu trữ mô tả, blob_key, url hình ảnh và ngày tháng.
Tôi có thể lưu mọi thứ, để bit đó ổn.
Nhưng bây giờ tôi muốn tạo một nút xóa sẽ không chỉ xóa một mục từ kho dữ liệu, mà còn xóa hình ảnh được lưu trong kho màu.
Tôi đã tạo Trình xóa, và trong html tôi có biểu mẫu, chuyển khóa cho mục tôi muốn xóa. Trong DeleteHandler, tôi đang sử dụng khóa được đăng để xóa mục khỏi kho dữ liệu. Tôi cũng đang cố gắng sử dụng chìa khóa để sử dụng nó xóa hình ảnh được lưu trong blobstore.
Cho đến giờ tôi nhận được 404 trên bài đăng xóa biểu mẫu và thậm chí nếu tôi vượt qua điều đó, tôi không chắc liệu Trình quản lý DeleteHandler của tôi có chính xác không để xử lý chức năng tôi đang tìm kiếm.
Bất kỳ trợ giúp sẽ được nhiều đánh giá cao ..
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>
Nhờ sự giúp đỡ của bạn với Eric này. Nó gần như hoạt động ngay bây giờ, ngoại trừ mục đó không bị xóa khỏi blobstore. Tôi đã thử blobstore.delete (item.key) và blobstore.delete ([item.key]). Dường như không làm thủ thuật – user791793
Tôi thấy trong bài đăng tiếp theo của bạn mà bạn đã tìm ra. Tôi vui vì bạn đã làm nó hoạt động. Cảm ơn bạn đã trả lời và cho chúng tôi biết chi tiết. –
Cảm ơn Eric, đánh dấu câu trả lời của bạn bằng một dấu tích, nhìn thấy khi bạn chỉ ra để sử dụng blobstore.delete (KEY) là một phần quan trọng trong việc tìm ra điều này – user791793