Django的私人媒体。在向private_media_url提供文件(上载到private_media_root)之前,请检查用户的授权。需要django 1.5。
django-private-media的Python项目详细描述
===
django私有媒体
=
overview
----
默认情况下,django允许您指定用户(或管理员)上传媒体的媒体根目录。所有人都可以通过media_url访问它。
使用django private media,您还可以指定private_media_root和private_media_url。使用提供的privateMediaStorage()存储类上载专用文件或图像。它们由一个视图提供服务,该视图在提供服务之前检查用户的授权。
在webfaction上设置xsendfile(例如)将在"here<;http://community.webfaction.com/questions/12205/serving static files with django using xsendfile>;"中介绍。通过修改stephan foulis的django文件管理器中的代码,添加nginx服务器将变得很容易。
当我研究django filer的安全文件下载方法时,我终于明白了它是如何做到的;但是,我有一个现有的项目,不想采用django文件管理器的全部功能。
我还希望能够将其应用于现有项目,而无需进行任何数据迁移;有了它,您只需确保您的媒体文件从媒体根目录重新定位到私有媒体根目录。
属性
----
此代码的关键部分基于Stephan Foulis和
`Django filer<;https://github.com/stefanfoulis/Django filer>的贡献者编写的代码;`.
注意事项
----
尽管到目前为止,就我的目的而言,它工作得令人满意,但这并不是一个完成的项目。尤其是,它没有任何测试。但是,
添加到"settings.py"中,例如:
private嫒media嫒url='/private/'
如果调试:
dev
import os
project嫒path=os.path.abspath(os.path.dirname(嫒file嫒))
private嫒media嫒root=os.path.join(project嫒path,"private")
专用媒体服务器="专用媒体服务器。默认服务器"
其他:
产品
专用媒体根="/home/user/my/path/to/private/media"
专用媒体服务器="专用媒体服务器。apachexsendfileserver"
#private_media_server_options={'arg1':1,…}(可选)kwargs to init server
默认权限是让经过身份验证的工作人员看到所有,而不是其他人。
概括来说,还添加::
private_media_permissions='myapp.permissions.mypermissionclass'
private_media_permissions_options={'arg1':1,…}(可选)kwargs to init
此权限类必须具有以下方法::
has_read_permissions(self,request,路径)
,返回true或false。
使用:
from django.db import models
from private廑media.storages import private media storage
class car(models.model):
photo=models.imagefield(storage=private mediastorage())
permissions method
是它的路径,您需要在上载时将允许的权限编码到路径中。
例如,您可以使用它将所有者的主键保存到路径中:
import os
from django.db import models
from django.contrib.auth.models i从私有媒体导入用户
存储导入私有媒体存储
def owner_file_name(instance,filename):
返回os.path.join('cars',"{0}"。格式(instance.user.pk),filename)
class car(models.model):
owner=models.foreignkey(user)
photo=models.imageField(存储=privateMediaStorage(),upload_to=owner_file_name)
,然后提供这样一个许可类(允许员工和所有者查看):
import os
from django.http import http404
class owner erpkpermissions(object):
def具有读取许可(self、request、path):
user=request.user
如果不是user.is戋authenticated():
返回false
elif user.is戋superuser:
返回true
elif user.is戋staff:
返回true
否则:
尝试:
所有者pk=int(os.path.split(os.path.split(path)[0])[1])
除了值错误:
引发http404('file not found')
返回(user.pk==所有者pk)
详细文档请参见`<;http://racingtapole.com/blog/private media with django/>;`,位于"docs"目录中(待定)。
django私有媒体
=
overview
----
默认情况下,django允许您指定用户(或管理员)上传媒体的媒体根目录。所有人都可以通过media_url访问它。
使用django private media,您还可以指定private_media_root和private_media_url。使用提供的privateMediaStorage()存储类上载专用文件或图像。它们由一个视图提供服务,该视图在提供服务之前检查用户的授权。
在webfaction上设置xsendfile(例如)将在"here<;http://community.webfaction.com/questions/12205/serving static files with django using xsendfile>;"中介绍。通过修改stephan foulis的django文件管理器中的代码,添加nginx服务器将变得很容易。
当我研究django filer的安全文件下载方法时,我终于明白了它是如何做到的;但是,我有一个现有的项目,不想采用django文件管理器的全部功能。
我还希望能够将其应用于现有项目,而无需进行任何数据迁移;有了它,您只需确保您的媒体文件从媒体根目录重新定位到私有媒体根目录。
属性
----
此代码的关键部分基于Stephan Foulis和
`Django filer<;https://github.com/stefanfoulis/Django filer>的贡献者编写的代码;`.
注意事项
----
尽管到目前为止,就我的目的而言,它工作得令人满意,但这并不是一个完成的项目。尤其是,它没有任何测试。但是,
添加到"settings.py"中,例如:
private嫒media嫒url='/private/'
如果调试:
dev
import os
project嫒path=os.path.abspath(os.path.dirname(嫒file嫒))
private嫒media嫒root=os.path.join(project嫒path,"private")
专用媒体服务器="专用媒体服务器。默认服务器"
其他:
产品
专用媒体根="/home/user/my/path/to/private/media"
专用媒体服务器="专用媒体服务器。apachexsendfileserver"
#private_media_server_options={'arg1':1,…}(可选)kwargs to init server
默认权限是让经过身份验证的工作人员看到所有,而不是其他人。
概括来说,还添加::
private_media_permissions='myapp.permissions.mypermissionclass'
private_media_permissions_options={'arg1':1,…}(可选)kwargs to init
此权限类必须具有以下方法::
has_read_permissions(self,request,路径)
,返回true或false。
使用:
from django.db import models
from private廑media.storages import private media storage
class car(models.model):
photo=models.imagefield(storage=private mediastorage())
permissions method
是它的路径,您需要在上载时将允许的权限编码到路径中。
例如,您可以使用它将所有者的主键保存到路径中:
import os
from django.db import models
from django.contrib.auth.models i从私有媒体导入用户
存储导入私有媒体存储
def owner_file_name(instance,filename):
返回os.path.join('cars',"{0}"。格式(instance.user.pk),filename)
class car(models.model):
owner=models.foreignkey(user)
photo=models.imageField(存储=privateMediaStorage(),upload_to=owner_file_name)
,然后提供这样一个许可类(允许员工和所有者查看):
import os
from django.http import http404
class owner erpkpermissions(object):
def具有读取许可(self、request、path):
user=request.user
如果不是user.is戋authenticated():
返回false
elif user.is戋superuser:
返回true
elif user.is戋staff:
返回true
否则:
尝试:
所有者pk=int(os.path.split(os.path.split(path)[0])[1])
除了值错误:
引发http404('file not found')
返回(user.pk==所有者pk)
详细文档请参见`<;http://racingtapole.com/blog/private media with django/>;`,位于"docs"目录中(待定)。