BAE3.0之Django使用七牛云存储方法

2014/11/27   
分类:  blog    django    qiniu   

由于BAE(or SAE/GAE等)中代码上传是有限制的,所以要使用云存储来放置media上传的图片,文件等等。

BAE中有提供BCS云存储,不过没有免费限额,对于小网站不划算,所以本网站目前采用七牛云存储

那么问题来了:BAE的python requirements当然不支持竞争对手了。

解决方法:

  • 把qiniu这个文件包直接放置在你项目的目录中(与其他app同级)

  • 运行会发现缺少requests,这个BAE中支持,填到requirements中就可以了

这样就能支持qiniu python了,不过要怎么使用呢?

刚好github上面有人提供了django-qiniu-storage 

使用方法:

  • 与qiniu放置在同一个目录(其他也可以)

  • 在settings.py中添加如下代码

MEDIA_URL = ' 

QINIU_ACCESS_KEY = 'xxxxxxxx'
QINIU_SECRET_KEY = 'xxxxxxxx'
QINIU_BUCKET_NAME = 'you-bucketname'
QINIU_BUCKET_DOMAIN = MEDIA_URL
DEFAULT_FILE_STORAGE = 'qiniustorage.backends.QiniuStorage'

这样全部的文件存储都使用七牛了,如果想单独配置,可以在model中的Field添加storage=’QiniuStorage()’

  • 在上传的时候发现django-qiniu-storage有个问题,修改方法如下(我用的django 1.6.2,不知道是不是版本问题)
def _put_file(self, name, content):
        token = self.auth.upload_token(self.bucket_name)
        ret, info = put_data(token, name, content)
        #if ret['key']!= name: #注释掉这两句
        #    raise QiniuError(info)

以上就能在BAE上使用七牛云存储了。使用BCS等其他可参考django-qiniu-storage中Storage的重写方法。

注意:你会发现当在admin中删除文件的时候,云存储并不会删掉文件。处理方法请参考Django中delete_selected删除文件的方法


本文地址 http://www.0kai.net/blog/2014/11/27/9-django-bae3.0-qiniu.html,转载请注明!