我知道上传到blobstore的最好方法是使用blobstore API,所以我尝试实现它,但我得到了一些奇怪的错误,似乎暗示我不能只嵌入一个blobstore处理程序在我的views.py文件中。我是不是错了?
ETA:我我使用Django获取所有其他视图和模板,以防不清楚。只是想确保没有人认为我无缘无故地导入Django的东西。我有点不习惯在这个项目中使用它。
以下是我目前得到的错误:
AttributeError at /fileupload
'PhotoUploadHandler' object has no attribute 'status_code'
Request Method: GET
Request URL: http://localhost:8080/fileupload
Django Version: 1.5.4
Exception Type: AttributeError
Exception Value:
'PhotoUploadHandler' object has no attribute 'status_code'
Exception Location: C:\Program Files (x86)\Google\google_appengine\lib\django-1.5\django\middleware\common.py in process_response, line 106
以下是我的views.py文件中的文件上传部分:
from django import http
from django.core.context_processors import csrf
from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext
from django.shortcuts import render_to_response
from models import Contact
from google.appengine.ext.webapp import blobstore_handlers
from google.appengine.ext import blobstore
from google.appengine.ext import webapp
class PhotoUploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload = self.get_uploads()[0]
photo = Photo(blob_key=upload.key())
db.put(photo)
self.response.out.write('<html><body><img class="imgpreview" src="/photo/%d"></body></html>' % photo.key().id())
def get(self):
upload_url = blobstore.create_upload_url('/photo')
self.response.out.write('<html><body>')
self.response.out.write('<form action="%s" method="POST" enctype="multipart/form-data">' % upload_url)
self.response.out.write('Upload File: <input type="file" name="file">')
self.response.out.write('<br><input type="submit" value="Upload"></form>')
self.response.out.write('</body></html>')
答案 0 :(得分:2)
在django中默认使用django工具包来支持在GCS中存储文件可能更简单。
在你的settings.py中:
APPENGINE_TOOLKIT = {
# ...,
'BUCKET_NAME': 'your-bucket-name',
}
DEFAULT_FILE_STORAGE = 'appengine_toolkit.storage.GoogleCloudStorage'
https://github.com/masci/django-appengine-toolkit
然后,文件将自动且透明地从Google云端存储中保存/提供。
答案 1 :(得分:0)
你需要
from models import Photo
from < whatever db > import db
...
photo.put()