用于媒体管理的可插拔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实例。

安装

pip install django-medialibrary

或者你可以find the project on github

运行独立测试

您可以通过以下途径运行测试:

^{tt9}$

^{tt10}$

^{tt11}$

赞助商

此应用程序是在我们处理Vidzor时在Pulilab编写的。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
http POST请求Java CouchDB   java删除带有大量尾随0的浮点字符串上的科学符号   JavaEE5和Hibernate   java如何在Spring Social中获得比特定id更早的tweet   java是框架。revalidate()在事件后获取输出是否重要?   java为什么不能返回通用映射?   java如何理解和优化工厂方法的高自时间   java Eclipse 202006错误由于项目的生成路径不完整,因此未生成该项目   多线程是java。util。向量序列化线程安全?   在Eclipse和java中使用不同的构建配置。属性文件   编译Java:从命令行运行的问题   java如何知道消息是否已确认/取消?   Java铸造一套   java Android Seekbar progress已更改变量,给出错误