使用redis将元数据附加到任何Django模型
项目描述
使用redis将元数据附加到任何Django模型。
安装
您可以从GitHub克隆包,或从PyPI的一个版本中拉取
pip install django-metadata
使用方法
使用django-metadata
,您可以将元数据附加到任何Django模型,您将能够将键及其值链接到任何实例。
假设您有这个模型
# 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 的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b6a886a6bf6af623c39aa97e80c28dd5aa0d73f7cd08bfb301a684e1cc100695 |
|
MD5 | 95f3558633f338d6d2c2cf969cd4236c |
|
BLAKE2b-256 | 262233d415beb1dea307aadb6f91fd0f175db5e118f98ed1acfce01b8d846b1d |