【问题标题】:Django: does ImageField need a filepath or an actual image object?Django:ImageField 需要文件路径还是实际的图像对象?
【发布时间】:2014-09-13 21:45:13
【问题描述】:

运行:Windows 7、Python 3.3、Django 1.6

我对如何将图像存储为 Django 数据库中表的一部分感到困惑。有一个字段叫做ImageField,这里是Docs

问题:

在构造记录时我应该向 ImageField 传递什么:文件路径字符串?图片的网址?还是图像本身的字节表示?或者是否有某种方法可以将图像加载到 Django 中,然后将其传递给该图像对象的引用(或指针)?

文档说:“默认情况下,ImageField 实例在您的数据库中创建为 varchar(100) 列。”这让我认为它需要一个文件路径,因为它要求一个字符串。

文档还说它“需要 Pillow 库。”,我已经下载了,但它没有指定如何使用 Pillow。

背景:我正在通过 django 构建一个 REST API 来发送和接收来自 Selenium 测试的日志文件并将它们存储在 SQL 数据库中。每个日志文件都带有一个屏幕截图,因此需要一个 ImageField。前几天刚开始使用Django。

【问题讨论】:

    标签: python sql django image


    【解决方案1】:

    通过 imagefield 和 imagefield 派生的表单,您可以将图像上传到 MEDIA_ROOT。

    Imagefield 存储它的图像路径。检查 django 文档的“媒体”部分,它描述了如何存储用户上传的图像。

    Imagefield 还定义了图像的一些基本属性,例如宽度和高度。

    在你设置的 setting.py 文件中:

    MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
    MEDIA_URL = '/media/'
    

    上面说我想将上传的文件存储在您的项目/媒体中,并且我也想在其中显示它们 www.yoursite.com/media/path_to_image/image.png

    然后你可以定义一个带有 imagefield 的类。

    class YourClass(models.Model):
        description = models.CharField(max_length=300, unique=True)
        picture = models.ImageField(upload_to='myimages')
    

    因此图像将存储在 yourproject/media/myimages 中,并可在 www.yoursite.com/media/myimages/image.png

    创建新实例:

     from django.core.files import File
     from idontknow import YourClass
    
     yournewclass = YourClass(description='abc')
    
     yournewclass.picture.save('name.png',  File(open('path_to_pic/image.png', 'r'))
    

    【讨论】:

    • 我在这里没有找到任何“媒体”部分:docs.djangoproject.com/en/1.6/contents,但我确实找到了这个小段:docs.djangoproject.com/en/1.6/faq/usage/…这是你的意思吗?
    • 感谢您的回答。不过,我更需要的是,当我在YourClass 表中插入一条新记录时,我在该构造函数中提供了哪种数据类型?例如y = YourClass(description='hello', picture= <WHAT GOES HERE? FILEPATH OR IMAGE OBJECT REFERENCE?>)如果我的问题不清楚,我深表歉意
    • 另一个编辑 :) 我从未尝试过,所以这是我的来源stackoverflow.com/questions/15332086/…
    • **edit,模式应该是'rb',所以Python会将其读取为二进制文件。
    猜你喜欢
    • 2011-03-18
    • 2016-02-02
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2014-06-02
    • 2015-11-13
    相关资源
    最近更新 更多