python - 在 Django 中到达/下载文件时,我应该如何执行权限检查?

标签 python 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

在浏览器的 URL 栏中,只有在她是 Amy 时才有效。什么是这样做的好方法?是否有用于此目的的图书馆?

最佳答案

你可以为此定义 View

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),
]

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

关于python - 在 Django 中到达/下载文件时,我应该如何执行权限检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39988697/

相关文章:

python - 如何查询由多个外键组成的模型

django - 无效语法(urls.py,第 7 行)

mysql - 如何使用 Django ORM 将表情符号插入 MYSQL 5.5 及更高版本

python - 如何使 Numba 访问数组的速度与 Numpy 一样快?

python - 尝试创建测试图案样式条时,Imshow 和 pcolor 会抛出错误

python - 'Webdrivers' 可执行文件可能有错误的权限。请参阅 https ://sites. google.com/a/chromium.org/chromedriver/home

django - "best"获取列表大小的方法

python - Django 查询多对多子集包含

Python 尝试/排除 : trying multiple options

django - Supervisord/Celery 输出日志