跳转到主要内容

Django视图用于AWS S3签名

项目描述

Build Status Coverage Status

django-s3sign

为django提供s3签名视图

安装

$ pip install django-s3sign

使用

s3sign 添加到 INSTALLED_APPS。根据需要继承 s3sign.views.SignS3View 并重写。

您可以重写的属性(及其默认值)

    name_field = 's3_object_name'
    type_field = 's3_object_type'
    expiration_time = 10
    mime_type_extensions = [
        ('bmp', '.bmp'),
        ('gif', '.gif'),
        ('jpeg', '.jpg'),
        ('pdf', '.pdf'),
        ('png', '.png'),
        ('svg', '.svg'),
        ('webp', '.webp'),
    ]
    default_extension = '.obj'
    root = ''
    path_string = (
        "{root}{now.year:04d}/{now.month:02d}/"
        "{now.day:02d}/{basename}{extension}")
    acl = "public-read"

您可以重写的方法

  • get_aws_access_key(self)
  • get_aws_secret_key(self)
  • get_bucket(self)
  • get_mimetype(self, request)
  • extension_from_mimetype(self, mime_type)
  • now(self) # 适用于单元测试
  • now_time(self) # 适用于单元测试
  • basename(self)
  • get_object_name(self, extension)

其中大部分都很清楚。如果有疑问,请阅读源代码。

例如,使用不同的根路径

from s3sign.views import SignS3View
...

class MySignS3View(LoggedInView, SignS3View):
    root = 'uploads/'

使用不同的S3存储桶

class MySignS3View(LoggedInView, SignS3View):
    def get_bucket(self):
        return settings.DIFFERENT_BUCKET_NAME

保留上传的文件名而不是随机生成一个,并使用白名单扩展名

class MySignS3View(LoggedInView, SignS3View):
    def basename(self, request):
        filename = request.GET[self.get_name_field()]
        return os.path.basename(filename)

    def extension(self, request):
        filename = request.GET[self.get_name_field()]
        return os.path.splitext(filename)[1]

javascript/forms

所需的JavaScript也已包含在内,因此您可以使用以下方式将其包含在您的页面上

{% load static %}

<script src="{% static 's3sign/js/s3upload.js' %}"></script>

然后,您的表单中可能包含类似以下内容

<form method="post">
    <p id="status">
        <strong>Please select a file</strong>
    </p>

    <input type="hidden" name="s3_url" id="uploaded-url" />
    <input type="file" id="file" onchange="s3_upload();"/>
</form>

并且

<script>
function s3_upload() {
    var s3upload = new S3Upload({
        file_dom_el: null, // Optional, and overrides file_dom_selector
                           // when present.
        file_dom_selector: '#file',
        s3_sign_put_url: '/sign_s3/', // change this if you route differently
        s3_object_name: $('#file')[0].value,

        onProgress: function(percent, message) {
            $('#status').text('Upload progress: ' + percent + '% ' + message);
        },
        onFinishS3Put: function(url) {
            $('#uploaded-url').val(url);
        },
        onError: function(status) {
            $('#status').text('Upload error: ' + status);
        }
    });
}
</script>

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

django-s3sign-0.4.0.tar.gz (32.0 kB 查看哈希值)

上传时间

构建分发

django_s3sign-0.4.0-py3-none-any.whl (37.8 kB 查看哈希值)

上传时间 Python 3

AWSAWS云计算和安全赞助商DatadogDatadog监控FastlyFastlyCDNGoogleGoogle下载分析MicrosoftMicrosoftPSF赞助商PingdomPingdom监控SentrySentry错误记录StatusPageStatusPage状态页面