跳转到主要内容

版本化文件字段用于django模型

项目描述

django-vff

简介

此包为django模型提供了一个文件字段,该字段将文件内容存储在版本控制系统(VCS)下。每当更改特定模型实例的字段时,新内容将作为新版本提交到存储库中。因此,存储库中每个vff字段和实例都将有一个文件。存储库位于settings.VFF_REPO_ROOT,或者如果没有设置,则位于django的settings.MEDIA_ROOTvf_repo子目录中。

可以使用不同的VCS来管理存储库,使用可插拔的后端。该包仅提供开箱即用的GIT后端。

安装

像安装任何其他pypi包一样安装django-vff

$ pip install django-vff

您不需要将任何内容添加到Django的INSTALLED_APPS中。

配置

您必须在django的settings.py中设置以下变量

VFF_BACKEND

指向后端类的点名称,例如"vff.git_backend.GitBackend"。此设置是必需的。

对于git后端

VFF_REPO_ROOT

到git存储库位置的绝对路径。在设置django-vff之前,此存储库可能存在或不存在。

VFF_REPO_PATH

在git仓库中,django-vff管理文件所在的目录的相对路径。

如果这两个git后端设置没有设置,VFF_REPO_ROOT将假定值为os.path.join(settings.MEDIA_ROOT, 'vf_repo'),而VFF_REPO_PATH将假定值为''

用法

您可以使用它就像使用django.db.models.FileField一样。

from django.db import models
from vff.field import VersionedFileField


class MyModel(models.Model):
    name = models.CharField('Name', max_length=128)
    content = VersionedFileField(name='content', verbose_name='file content')

一旦您有了MyModel类的实例,您可以使用三种特殊方法来列出可用版本、获取特定版本以及获取版本之间的差异。

  • 列出修订版本

    >>> revs = instance.content.list_revisions()
    >>> from pprint import pprint
    >>> pprint(revs)
    [{'author': u'John Smith',
      'date': datetime.datetime(2011, 6, 16, 13, 25, 30),
      'message': u'second version',
      'versionid': 'a64ea785e195bbf4b3064e6701adbdbf4b5d13be'},
     {'author': u'Martha Brown',
      'date': datetime.datetime(2011, 6, 16, 8, 24, 36),
      'message': u'first version',
      'versionid': '048848a70205d0e18d836f403e2a02830492cbf9'}]
  • 获取特定修订版本的字符串内容

    >>> rev1_id = revs[-1]['versionid']
    >>> instance.content.get_revision(rev1_id)
    u'These are the contents of the first version of the file'
  • 获取两个修订版本之间的差异

    >>> rev2_id = revs[-2]['versionid']
    >>> print instance.content.get_diff(rev1_id, rev2_id)
    --- 048848a70205d0e18d836f403e2a02830492cbf9
    
    +++ a64ea785e195bbf4b3064e6701adbdbf4b5d13be
    
    @@ -1,1 +1,1 @@
    
    -These are the contents of the first version of the file
    +These are the contents of the second version of the file

保存和删除

目前,必须显式地为此字段执行保存和删除操作。例如,如果您有一个包含content vff字段的模型实例,并且一个使用带有forms.FileField的编辑表单的视图,在验证表单后,您必须执行类似以下操作:

name = instance.content.name
content = form['content'].data
username = request.user.username
commit_msg = form['commit_msg'].data.encode('utf8')
instance.content.save(name, content, username, commit_msg)
instance.save()

同样,在删除实例时,您会

username = request.user.username
commit_msg = u'entity removed'
instance.content.delete(username, commit_msg)
instance.delete()

将来,如果有兴趣,该包可以包括一个特殊的小部件,其中包含输入空间以存储必要的数据(提交消息等),以便保存和删除操作是透明的。

提供新的后端

要为django-vff开发新的后端,您必须继承抽象基类vff.abcs.VFFBackend。需要实现的方法在类的文档字符串中有说明。

变更记录

0.2b2 (2012-01-25)

  • 修复README.txt中的错别字

  • 修复在初始化GIT仓库时未捕获的异常。

0.2b1 (2012-01-24)

  • (git)仓库现在可以位于文件系统的任何位置(不一定在MEDIA_ROOT内),并且可以告诉django-vff将文件保存在仓库的子目录中。

0.1b4 (2011-10-01)

  • 更好地修复删除仓库中没有文件的对象的错误。

0.1b3 (2011-10-01)

  • 不要删除仓库中没有文件的对象。

0.1b2 (2011-09-20)

  • 在删除对象时从仓库中删除文件。

  • 更改VersionedFieldFile的保存和删除签名,以便与django的FieldFile兼容。

0.1b1 (2011-09-02)

  • 初始版本,包含VersionedFileField和git后端。

项目详情


下载文件

下载适合您平台文件。如果您不确定要选择哪个,请了解更多关于安装包的信息。

源分布

django-vff-0.2b3.tar.gz (10.2 kB 查看哈希值)

上传时间

支持者