0

我有一个使用多用户的 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

设置.py

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

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

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

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

4

2 回答 2

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 %}
于 2014-07-07T09:38:39.903 回答
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})
于 2014-07-07T10:57:15.080 回答