用于媒体管理的可插拔django应用程序。
django-medialibrar的Python项目详细描述
欢迎使用Django MediaLibrary的文档!
Django MediaLibrary是一个可插入的Django应用程序,能够以透明的方式存储不同的媒体类型(音频、视频、图像)和给定文件的多个版本。
要解决的基本问题是以一种非常简单的方式存储、检索和管理同一文件的多个版本。例如,用户上传一段视频,你必须将其转换成不同的格式。对于用户,您希望仅在其上载文件列表中显示一个媒体,但仍希望在必要时提供所有生成的文件,此外,如果用户决定删除其媒体,您希望删除其所有版本。
这个应用程序的想法是把所有这些都放在一个独立的、易于使用和扩展的应用程序中。
功能
每种媒体类型的唯一入口点,user.medialibrary.shelf_set
不同的搁置,每种媒体类型的登录名可能不同。shelf\u集合包含不同的模型,每个模型都来自于medialibrary.models.shelf。
简单访问原始文件。:
myShelf = AudioShelf.objects.get(pk=1) myShelf.audio_set.all() # returns the list of audio files isinstance(myShelf.original, Audio) # return True, if a file is attached to myShelf myShelf.original.size, myShelf.original.url
自定义管理器以查询工具架。
使用shelfrelation模型将工具架绑定到项目中的任何对象的泛型关系
每个shelf类型都可以有一个allowed_formats属性,该属性列出要保存在shelf中的允许扩展名。
VideoShelf可以附加缩略图(实际上是ImageShelf实例)。只能将其中一个标记为选中。myVideoShelf.Thumbnail属性返回选定的缩略图。
前端API
由于我们是通过API使用此应用程序,因此没有专门的HTML前端。提供的现成api是
/audio/,/video/,/image/-上载和列出给定类型的媒体元素
/<pk>/-获取有关单个媒体元素的详细信息
/<pk>/add/-向media元素添加关系,需要json格式:
{ 'model': 'app_name.model_name', 'object_id': 1 }
其中app_name.model_name是要附加的模型的natural key。
定制
除了文件存储的一般django设置外,还有一个自定义设置,即在文件字段中使用的upload方法。
import datetime def setup_s3_route(instance, filename=None): today = datetime.datetime.today() return 'media/%s-%02d-%02d/%s' % (today.year, today.month, today.day, filename) from medialibrary import utils utils.setup_upload_route = setup_s3_route
可以为shelfrelation模型上的limit_choices_to属性设置自定义参数。这样您就可以定义哪些应用程序可以与您的媒体元素建立关系。(例如,如果在删除媒体时删除附加记录,则可能不希望将django权限记录附加到媒体)。默认值是无限制!:
from medialibrary import utils from django.db import models utils.content_type_restriction = models.Q(app_label='auth', model='user')
添加新媒体类型
媒体库可以用新的媒体类型轻松扩展。下面是添加新文档架模型的示例:
from medialibrary.models import Shelf class DocumentShelf(Shelf): ALLOWED_FORMATS = ('doc', 'docx', 'pdf', 'odf') def file_set(): doc = "The file_set property." def fget(self): return self.audio_set return locals() file_set = property(**file_set())
在这个简单的模型定义之后,用户的user.medialibrary.shelf_set将在适当的时候包含documentshelf实例。
运行独立测试
您可以通过以下途径运行测试:
^{tt9}$
^{tt10}$
^{tt11}$