Django视图用于AWS S3签名
项目描述
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 查看哈希值)