Python 从decorator django引发的权限被拒绝
我有一个图像模型,其中有一个来自django user的用户字段foreignkeyPython 从decorator django引发的权限被拒绝,python,django,python-decorators,Python,Django,Python Decorators,我有一个图像模型,其中有一个来自django user的用户字段foreignkey class Image(models.Model): image = models.ImageField() user = models.ForeignKey(User) #more specific model fields 我希望媒体文件只提供给登录并上传媒体的用户。因此,我在apache中使用了X-SendFile头,使用以下视图 @owns_media def media_xs
class Image(models.Model):
image = models.ImageField()
user = models.ForeignKey(User)
#more specific model fields
我希望媒体文件只提供给登录并上传媒体的用户。因此,我在apache中使用了X-SendFile头,使用以下视图
@owns_media
def media_xsendfile(request, path):
print "inside media_xsendfile view"
print os.path.join(settings.MEDIA_ROOT,path)
response = HttpResponse()
response['Content-Type']=''
response['X-Sendfile']= smart_str(os.path.join(settings.MEDIA_ROOT, path))
return response
owns_media是一个装饰程序,用于检查登录的用户是否是上载图片的用户,并允许视图运行或引发PermissionDenied异常。这是装修工
def owns_media(view):
"""Decorator to check if users has permission to access media"""
def wrapper(request, *args, **kw):
path = kw['path']
user = request.user
image = Image.objects.get(image=path)
image_user = image.user
if user==image_user:
return view(request, *args, **kw)
else:
raise PermissionDenied
return wrapper
但这行不通。我登录到一个获得图片的用户,然后注销并尝试访问它,它确实提供了图片,但它不应该。我做错什么了吗?为什么不试着打印
image\u user
和user
的值呢?我总是忘记我需要重新启动apache…:(…一旦重新启动,就可以像charmIf一样工作。如果您正在进行开发,为什么不使用Django开发服务器?当您更改代码时,它会自动为您重新启动。是的,但是我正在准备设置它,所以在我的apache上设置它,然后我将部署它。