我有一个使用多用户的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}}>
显示用户的图像。如何防止用户看到其他用户上传的图片(禁止的消息)?可以在设置时完成吗?
答案 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})