Как я могу хранить URL-адреса из корзины Amazon S3 в Django sqlite db для отображения и комментирования? - PullRequest
1 голос
/ 13 марта 2012

Я использую Django в течение нескольких дней и настраиваю основной блог из учебника с комментариями Django.

У меня есть совершенно отдельный скрипт на python, который генерирует скриншоты и загружает их в Amazon S3, теперь я хотел бы, чтобы мое приложение django отображало все изображения в корзине и использовало систему комментариев на изображениях. Желательно, чтобы я делал это, просто сохраняя URL-адреса в моей базе данных 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, который мне нужен.

Одной из моих проблем является понимание того, как я могу интегрировать свои функции Boto с Django, если я использую Base.html. В более раннем уроке у меня была страница указателя, которая имела представление и могла оттуда вызывать функции. Но базе это не нужно, поэтому я начинаю немного терять.

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

не смотрел вверх, если изменился boto 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 голосов
/ 07 марта 2014

Это мой код для сохранения результата от s3 до mysql по boto, django.

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()
...