【问题标题】:How can I store URLs from Amazon S3 bucket in Django sqlite db to display & comment on?如何在 Django sqlite db 中存储来自 Amazon S3 存储桶的 URL 以显示和评论?
【发布时间】:2014-03-07 15:46:33
【问题描述】:

我已经使用 Django 几天了,并使用 django cmets 从tutorial 建立了一个基本博客。

我有一个完全独立的 python 脚本,它可以生成屏幕截图并将它们上传到 Amazon S3,现在我希望我的 django 应用程序显示存储桶中的所有图像并在图像上使用评论系统。最好我只将 URL 存储在我的 sqlite db 中来做到这一点,我目前已经对其进行了硬编码以显示 db 中的所有图像并在这些数据库上启用了 cmets。

我的模特:

(这需要 django cmets 的外键还是只是 Django Magic 的一部分?!)

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,我的一个问题是了解如何将我的 Boto 函数与 Django 集成。在早期的教程中,我有一个索引页面,它有一个视图并且可以从那里调用函数。但是base不需要那个,所以我开始有点迷茫了。

【问题讨论】:

    标签: python django amazon-s3 boto


    【解决方案1】:

    如果 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 是一个键值存储,其中 key 是一个字符串。因此,没有什么可以阻止您输入以下键:

    /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/") 将产生后三个。 查看此处了解更多详情:

    【讨论】:

    • 非常感谢。现在我想我需要找出一些正则表达式来将该 key.name 分隔到文件夹中,这样我就可以在存储桶浏览中建立一些组织,而不仅仅是一个巨大的图像列表。
    • 好吧,如果没记错的话,如果你想以“unix path like”的方式组织你的文件,你可以使用 bucket.list(s3_path) 函数,因为它列出了所有具有这个起始字符串的键共同点。
    • readthedocs.org/docs/boto/en/latest/ref/s3.html#boto-s3-bucket查看“list()”函数的参数(即前缀等)
    • 谢谢。 Boto 变得很棒。现在我只需要继续阅读 Djangobook 来弄清楚如何存储这些信息。
    【解决方案2】:

    这是我通过 boto、django 将结果从 s3 存储到 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()
    

    【讨论】:

      猜你喜欢
      • 2014-12-23
      • 1970-01-01
      • 2019-10-18
      • 2016-08-25
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 1970-01-01
      • 2011-09-10
      相关资源
      最近更新 更多