所以我正在使用 Amazon S3 存储来存储用户上传的文件。当用户在我的 Django 网站上发布帖子时,它会附带一些文本和图像/视频 - 该图像/视频会上传到我的 S3 存储桶上的 media
目录。
但是,这需要很长时间,例如,在帖子中包含6mb的图像将需要帖子超过一分钟才能提交。如果图像很小,例如 150kb,则只需大约 3 秒即可提交帖子。如何提高此性能?
Post
只是一个具有以下字段的表单(image
是图像或视频(:
class Post(models.Model):
user = models.ForeignKey(User, blank=True, null=True)
title = models.TextField(max_length=95)
date = models.DateTimeField(auto_now_add=True)
content = models.TextField(null=True, blank=True)
image = models.FileField(null=True, blank=True)
和观点:
def post(request):
if request.user.is_authenticated():
form_post = PostForm(request.POST or None, request.FILES or None)
if form_post.is_valid():
instance = form_post.save(commit=False)
instance.user = request.user
instance.save()
return HttpResponseRedirect('/home/')
else:
form_post = PostForm()
context = {
'form_post': form_post,
}
return render(request, 'post/post.html', context)
else:
return HttpResponseRedirect("/accounts/signup/")
知道吗?
您应该尝试处理昂贵的长时间运行的操作,例如在 API 终端节点处理程序之外将文件上传到 S3。
它将使您的 Web 应用程序更加健壮和可扩展,并且您不必处理可能超时的日志运行 HTTP 请求,并且您可以让用户了解正在发生的事情。
例如,您可以使用芹菜来处理排队。
你可以使用 django-queued-storage 来管理本地/远程存储上传和检索的实际案例。
用于说明其文档中的代码示例。
from django.db import models
from queued_storage.backends import QueuedStorage
from storages.backends.s3boto import S3BotoStorage
queued_s3storage = QueuedStorage(
'django.core.files.storage.FileSystemStorage',
'storages.backends.s3boto.S3BotoStorage')
class MyModel(models.Model):
image = ImageField(storage=queued_s3storage)