我有这样的案例:
我有一个后台面板。经过身份验证的用户可以将文件上载到系统。我的Django代码将文件上传到Amazon S3服务器,然后公开。
现在,我想要的是,直接写入图片网址的人无法看到文件(让我们说照片),但经过身份验证的用户可以看到这些文件。
有可能吗?
答案 0 :(得分:3)
您可以在视图上使用@login_required
decorator,只有在用户登录时才会显示图片。Django documentation的用户身份验证部分涵盖所有这些东西。
或者,您可以检查用户是否通过视图中的request.user登录,然后不将上下文中的图像详细信息传递给模板。
如果没有用户登录,或者不渲染模板的部分(我认为可能是最丑陋的方法)
{% if user.is_authenticated %}
# Do the template stuff
{% endif %}
至于限制s3的访问,它稍微复杂一些。您需要在存储桶中使您的文件非公开,然后在Django中生成具有查询字符串的URL,允许经过身份验证的用户访问以下载具有时间限制的特定s3对象。有关详细信息,请访问s3 documentation。关于SO here之前已经提出过类似的问题。