我正在尝试创建像网页这样的Facebook群组,人们可以在该群组页面上发布任何文本或图像,并且订阅该页面的所有用户都将获得人们发布的文本和图像的实时提要。
为了实现这一点,我正在使用django + tornado集成,其中网页由django渲染,所有异步请求由tornado使用websockets处理。
所以在组页面上,我能够使用 websocket 实现从客户端到服务器的文本传输,所有用户都可以实时更新页面上发布的新文本。现在,我也想允许人们分享图像。
我不确定我是否应该使用 django(使用 POST 上传)或龙卷风(使用 websockets)来上传图像。在这种情况下,首选方法是什么?
提案:用户将图像上传到 django,django 随时存储它并返回 url。然后,用户通过 websocket 发送此 URL,类似于文本发布。
你应该使用 Django 进行图像上传,这样做非常有效。这是一个简单的图像上传模型。
from django.db import models
LEFT = "left"
RIGHT = "right"
FLOAT_CHOICES = ((LEFT, _("left")),
(RIGHT, _("right")),
)
class Sample(CMSPlugin):
float = models.CharField(_("Image placement"), max_length=10, blank=True, null=True,
choices=FLOAT_CHOICES, help_text=_("Move image left, right or center."))
image = models.ImageField(_("image"), upload_to=CMSPlugin.get_media_path)
big_header = models.TextField(_("Quotation"),null=True, max_length=150)
name = models.CharField(_("Name of Recommending person"), max_length=150)
detail = models.CharField(_("School detail"), max_length=200)
与这些组合在requirements.txt
文件中包括两个包:
boto==2.7.0
django-storages==1.1.6
这些库为将图像上传到 S3 提供了非常好的支持(这是每个人都喜欢的媒体文件)。成功上传图像后,它会返回一个图像路径,该路径又保存到数据库中。
要使用 S3,请在您的 settings.py 或 base.py 中添加这些设置。
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_STORAGE_BUCKET_NAME = '<s3-bucket-name>'
AWS_S3_SECURE_URLS = False
AWS_PRELOAD_METADATA = True
AWS_ACCESS_KEY_ID = os.environ['AWS_ACCESS_KEY_ID']
AWS_SECRET_ACCESS_KEY = os.environ['AWS_SECRET_ACCESS_KEY']