阻止用户查看其他用户上传的图片

时间:2014-07-07 06:39:33

标签: django django-media

我有一个使用多用户的django应用程序。用户可以在系统上传图片。我创建了一个具有用户foreignKey的图片模型,以了解哪个用户上传了哪个图片。

class Picture(models.Model):
    picture = models.ImageField(upload_to='pictures')
    uploader = models.ForeignKey(User)
    #other specific fields like date etc

我已将设置文件设置为使用MEDIA_URL和MEDIA_ROOT

settings.py

MEDIA_URL ='/media/'
MEDIA_ROOT = 'path/to/media/'

所以我可以访问www.mydomain.com/media/pictures/picture.jpg中的图片。但我想有一个共同的MEDIA_ROOT意味着任何用户都可以看到这张照片吗?不只是上传它的用户。在我的网页中,我使用

<img src={{image.picture}}>

显示用户的图像。如何防止用户看到其他用户上传的图片(禁止的消息)?可以在设置时完成吗?

2 个答案:

答案 0 :(得分:0)

您的视图功能可能如下所示:

@login_required
def theview(request):
    ...
    image = Picture.objects.get(*args)
    ...
    return render(request, 'template', {'image': image})

关键是,如果已登录的用户已经上传了该图片,则您只能轻松传递该图像。例如

image = get_object_or_404(Picture, uploader=request.user, other_filters)

甚至

image = Picture.objects.get(*args)
image = image if image.uploader == request.user else None

然后在django模板中

{% if image %}
<img ....>
{% endif %}

答案 1 :(得分:0)

您可以尝试这样:

在观点中:

def allpicture(request):
       .....
       #for all pictures
       images= Picture.objects.filter(uploader=request.User)
       return render(request, '/sometemplate', {'images': images})


def onepicture(request, pic_id):
      ....
      #for one picture
      image= Picture.objects.filter(id= pic_id, uploader=request.User) #url for this view should be like url(r'^pictures/(?P<pic_id>\d+)/$'
      render render(request, '/sometemplate', {'image': image})