跳转到主要内容

使用redis将元数据附加到任何Django模型

项目描述

使用redis将元数据附加到任何Django模型。

Build Status

安装

您可以从GitHub克隆包,或从PyPI的一个版本中拉取

pip install django-metadata

使用方法

使用django-metadata,您可以将元数据附加到任何Django模型,您将能够将键及其值链接到任何实例。

目前仅支持Redis,后端仅支持redis-py

假设您有这个模型

# models.py

from django.db import models

class User(models.Model):
    username = models.CharField(max_length=150)

现在您需要将MetadataMixin附加到您的模型

# models.py

from django.db import models

from metadata.mixins import MetadataMixin

class User(MetadataMixin, models.Model):
    username = models.CharField(max_length=150)

您可以通过为您的模型提供 metadata_key 属性来自定义 django-metadata 存储值的方式。

# models.py

from django.db import models

from metadata.mixins import MetadataMixin

class User(MetadataMixin, models.Model):
    username = models.CharField(max_length=150)

    def metadata_key(self):
        return 'metadata:utilisateur:%d' % self.pk

默认情况下,模式将是 metadata:%(lowerclassname)s:%(primary_key)s

现在我们已经将我们的模型连接到了混合模型,我们可以与 API 进行交互。

MetadataContainer 的 API 与 dict 遵循相同的原则。

添加键

>>> from myapp.models import User
>>> user = User.objects.create(username='thoas')
>>> user.metadata['mail_signup_sent'] = 1
>>> user = User.objects.get(username='thoas')
>>> user.metadata['mail_signup_sent']
1
>>> user.metadata = {'mail_signup_sent': 0}
>>> user.metadata['mail_signup_sent']
0

删除键

您可以通过将键的值设置为 None 或使用 del 操作符来删除键。

>>> del user.metadata['key']
>>> user.metadata['key']
Traceback (most recent call last):
    ...
KeyError: 'key'
>>> user.metadata.get('key', None)
None
>>> user.metadata['foo'] = 'bar'
>>> user.metadata['foo'] = None
>>> user.metadata['foo']
Traceback (most recent call last):
    ...
KeyError: 'foo'
>>> user.metadata.get('foo', None)
None
>>> user.metadata['key'] = 'value'
>>> user.metadata['foo'] = 'bar'
>>> user.metadata = {'foo': None}
>>> user.metadata['foo']
Traceback (most recent call last):
    ...
KeyError: 'foo'
>>> user.metadata['key']
value

迭代键

>>> 'value' in user.metadata
True
>>> user.metadata.values()
['value']
>>> user.metadata.keys()
['key']
>>> user.metadata.items()
[('key', 'value')]

增加键

由于我们使用 Redis 作为存储引擎,您可以利用其一些优秀功能。

>>> user.metadata.incr('counter')
>>> user.metadata['counter']
1
>>> user.metadata.incr('counter', 2)
>>> user.metadata['counter']
3

灵感

django-metadata 来自 twidi 的原始想法。

项目详情


下载文件

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

源分发

django-metadata-0.2.0.tar.gz (7.7 kB 查看哈希)

支持