2012-03-13 48 views
1

我一直在使用Django幾天的&設置從tutorial一個基本的博客使用Django的意見。如何在Django sqlite數據庫中存儲來自Amazon S3存儲桶的URL以顯示&評論?

我有一個完全獨立的python腳本,可以生成屏幕截圖並將它們上傳到Amazon S3,現在我想讓我的django應用程序顯示存儲桶中的所有圖像並在圖像上使用註釋系統。最好我會這樣做,只需將網址存儲在我的sqlite數據庫中,我現在已經使用硬編碼來顯示數據庫中的所有圖像,並在這些數據庫上啓用了註釋。

我的模型:

(這是否需要一個外鍵Django的意見或者是說只是Django的魔術?的一部分)

class Image(models.Model): 
imgUrl=models.CharField(max_length=200) 
meta=models.CharField(max_length=300) 
def __unicode__(self): 
    return self.imgUrl 

我的桶結構: https://s3-eu-west-1.amazonaws.com/bucket/revision/process/images.png

幾乎所有的教程和包我發現是基於上傳/下載,而不是我想要一個簡單的for keys in bucket類型的方法。

我的一個問題是如何理解我,如果我使用base.html文件與Django的集成我博託功能。在之前的教程中,我有一個索引頁面,它有一個視圖,可以從那裏調用函數。但基地並不需要,所以我開始有點失落。

回答

2

沒有擡頭,如果博託API改變,但這是它是如何工作的我最後一次看

from boto.s3.connection import S3Connection 
from boto.s3.key import Key 
import s3config 

conn = S3Connection(s3config.passwd, s3config.secret) 
bucket = conn.get_bucket(s3config.bucket) 
s3_path = '/some/path/in/your/bucket' 
keys = bucket.list(s3_path) 
# or if you want all keys: 
# keys = bucket.get_all_keys() 

for key in keys: 
    print key 
    # here you can download or do other stuff 
    # with the keys like get some metadata 
    print key.name 
    print key.etag 
    print key.size 
    print key.last_modified 

#s3config.py 
passwd = 'BLABALBALABALA' 
secret = 'xvdwv3efefefefefef' 
bucket = 'name-of-your-bucket' 

更新:

Amazon S3的是一個關鍵值存儲區,其中鍵是一個字符串。所以,沒有什麼能阻止你把在鍵,如:

/this/string/key/looks/like/a/unix/path 
/folder/images/fileA.jpg 
/folder/images/fileB.jpg 
/folder/images/folderX/fileX1.jpg 

現在bucket.list(prefix="/folder/images/")將產生後三種。 在這裏尋找更多細節:

+0

十分感謝。現在我想我需要找出一些正則表達式來將key.name分隔到文件夾中,以便我可以構建一些組織來進行桶瀏覽,而不僅僅是一個巨大的圖像列表。 – 2012-03-13 09:24:18

+0

好吧,如果你沒記錯的話,你可以使用bucket.list(s3_path)函數,如果你喜歡用「unix path like」的方式來組織你的文件,因爲它列出了所有具有這個開始字符串的鍵。 – snies 2012-03-13 09:31:02

+0

http://readthedocs.org/docs/boto/en/latest/ref/s3.html#boto-s3-bucket查看「list()」函數的參數(即前綴等)。 – snies 2012-03-13 09:36:33

0

這是我的代碼存儲導致S3被博託,Django的MySQL的。

from demo.models import Movies 
import boto 
from boto.s3.key import Key 
import string 
from django.db import connection, transaction 

def movietitle(b): 
    key = b.get_key('netflix/movie_titles.txt') 
    content = key.get_contents_as_string() 
    line = content.split('\n') 
    args = [] 
    for imovie in line: 
     if len(imovie) > 0: 
      imovie = imovie.split(',') 
      movieid = imovie[0] 
      year = imovie[1] 
      title = imovie[2] 
      iargs = [string.atoi(movieid),title,year] 
      args.append(iargs) 
    cursor = connection.cursor() 
    sql = "insert into demo_movies(MovieID,MovieName,ReleaseYear) values(%s,%s,%s)" 
    cursor.executemany(sql,args) 
    transaction.commit_unless_managed() 
    cursor.close() 
相關問題