在Django中访问/下载文件时,应如何强制执行权限检查?

时间字符串

我不知道这是在Web应用程序中要做的典型事情,但是我们实现的是,假设我们有一个Person模型,在这个模型中,我们有FileField商店用户的照片:

class Person(models.Model):
    photo = models.FileField(upload_to='Person_photo')

我要实现的是只有所有者才能看到他或她的照片。登录其他帐户甚至不登录的人都无法看到该照片。假设我们有一种方法可以检查照片是否属于某个用户:

def permission(photo_filename, pid):
    # return True if photo_filename exists and belongs to the person pid

我们可以弄清楚这部分,例如,使用Django中提供的权限系统。当然,通过,views.py我们可以控制我们要在页面上显示的图像,但是例如,我们希望阻止用户尝试找出URL并获取照片,例如,键入

http://some.domain/media/Person_photo/Amy.jpg

当她是Amy时,浏览器中的URL栏中的起作用。有什么好方法吗?是否有用于此目的的图书馆?

谢尔盖·戈尔诺斯塔耶夫(Sergey Gornostaev)

您可以为此定义视图

view.py

from django.http import HttpResponse
from django.shortcuts import get_object_or_404
from django.contrib.auth.decorators import login_required

from appname.models import Person

@login_required
def show_photo(request):
    person = get_object_or_404(Person, user=request.user)
    response = HttpResponse(person.photo.read(), content_type="image/jpg")
    response['Content-Disposition'] = 'filename=photo.jpg'
    return response

urls.py

urlpatterns += [
    url(r'^photo/$', show_photo),
]

用户只会看到他们的照片。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章