使用redis将元数据附加到任何django模型
django-metadata的Python项目详细描述
使用redis将元数据附加到任何django模型。
用法
使用django-metadata可以将元数据附加到任何django模型,您将 能够将键及其值链接到任何实例。
假设您有这个型号:
# models.pyfromdjango.dbimportmodelsclassUser(models.Model):username=models.CharField(max_length=150)
现在您必须将MetadataMixin附加到您的模型:
# models.pyfromdjango.dbimportmodelsfrommetadata.mixinsimportMetadataMixinclassUser(MetadataMixin,models.Model):username=models.CharField(max_length=150)
您可以通过提供 模型的metadata_key属性:
# models.pyfromdjango.dbimportmodelsfrommetadata.mixinsimportMetadataMixinclassUser(MetadataMixin,models.Model):username=models.CharField(max_length=150)defmetadata_key(self):return'metadata:utilisateur:%d'%self.pk
默认情况下,架构将是metadata:%(lowerclassname)s:%(primary_key)s。
现在我们已经把我们的模型连接到了MIXIN,我们可以用API来玩。
MetadataContainer的api遵循与dict相同的原理。
添加键
>>>frommyapp.modelsimportUser>>>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 接线员。
>>>deluser.metadata['key']>>>user.metadata['key']Traceback(mostrecentcalllast):...KeyError:'key'>>>user.metadata.get('key',None)None>>>user.metadata['foo']='bar'>>>user.metadata['foo']=None>>>user.metadata['foo']Traceback(mostrecentcalllast):...KeyError:'foo'>>>user.metadata.get('foo',None)None>>>user.metadata['key']='value'>>>user.metadata['foo']='bar'>>>user.metadata={'foo':None}>>>user.metadata['foo']Traceback(mostrecentcalllast):...KeyError:'foo'>>>user.metadata['key']value
迭代键
>>>'value'inuser.metadataTrue>>>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的原始想法。